Get-DnsServerResourceRecord -ComputerName server -ZoneName zone.com
Я хочу запустить эту команду и получить наборы HostName, RecordType, ZoneName и All RecordData.
У меня пока что-то вроде:
Get-DnsServerResourceRecord zone.com -ComputerName server |
select hostname, recordType, name,
@{Name='ARecordData';Expression = {$_.RecordData.IPv4Address}},
@{Name='CNameRecordData';Expression = {$_.RecordData.HostnameAlias}}
У меня двоякая проблема.
Вы можете добавить имя зоны как расчетное свойство точно так же, как вы это делаете с данными записи.
foreach ($zone in $zone_list) {
Get-DnsServerResourceRecord -ZoneName $zone -ComputerName server |
Select-Object hostname, @{n='ZoneName';e = {$zone}}, recordType, ...
}
Не создавайте отдельные свойства, вместо этого используйте оператор switch
для выбора соответствующих данных в зависимости от типа записи в отдельном свойстве.
... | Select-Object hostname ..., @{n='Data';e = {
$rr = $_
switch ($rr.RecordType) {
'A' {$rr.RecordData.IPv4Address}
'CNAME' {$rr.RecordData.HostnameAlias}
...
}
}}
Код: @ {n = 'Data'; e = {switch ($ _. RecordType) {'A' {$ _. RecordData.IPv4Address} 'CNAME' {$ _. RecordData.HostnameAlias} 'NS' {$ _. RecordData.NameServer} 'SOA' {$ _. RecordData.PrimaryServer} 'SRV' {$ _. RecordData.DomainName} 'PTR' {$ _. RecordData.PtrDomainName} 'MX' {$ _. RecordData.MailExchange} 'AAAA '{$ _. RecordData.IPv6Address}' TXT '{$ _. RecordData.DescriptiveText}}}}
@JamieLawson Мое плохое. $_
в блоках действий относится к совпавшему элементу (здесь $_.RecordType
), у которого нет свойств, которые вы хотите раскрыть. См. Обновленный ответ.
Спасибо, это было исправление. Есть какая-нибудь информация для понимания изменения? Действительно смущен тем фактом, что я вижу, что вы устанавливаете $ rr = $ _, который мы уже использовали, а затем заменили все $ _ на $ rr. Если есть что-то, что я мог бы прочитать об этом или что-то в этом роде. В противном случае большое спасибо за помощь.
@JamieLawson Текущая объектная переменная $_
может иметь разные значения в зависимости от контекста, в котором она используется. В switch ($_.RecordType) { 'A' { $_.RecordData } ... }
первый $_
и второй $_
относятся к разным объектам (первый - это объект, полученный из конвейера, второй - это значение, используемое при сравнении переключателей, то есть значение свойства RecordType
). Присваивая $_
обычной переменной ($rr
) до, оператор switch
гарантирует, что вы ссылаетесь на тот же объект в тестовом значении и блоков действий.
Итак, первый пункт 1 отлично работает, и спасибо вам за это, потому что что-то такое простое уже давно меня преследует. Часть 2, хотя я не могу приступить к работе, поскольку столбец данных возвращается пустым. Я изучаю это, но только предупреждаю о первом тесте.