Dnsserverresourcerecord - все расширенные свойства и зона

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}}

У меня двоякая проблема.

  1. Мне нужно знать, как добавить ZoneName в набор записей, поэтому, если я хочу передать несколько зон, я могу хранить эти данные отдельно.
  2. В приведенном выше примере будут созданы разные столбцы для каждого RecordData. Поскольку запись DNS будет иметь только одно из этих значений, есть ли способ объединить их в один столбец с помощью PowerShell?
Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
0
0
894
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий
  1. Вы можете добавить имя зоны как расчетное свойство точно так же, как вы это делаете с данными записи.

    foreach ($zone in $zone_list) {
        Get-DnsServerResourceRecord -ZoneName $zone -ComputerName server |
            Select-Object hostname, @{n='ZoneName';e = {$zone}}, recordType, ...
    }
    
  2. Не создавайте отдельные свойства, вместо этого используйте оператор switch для выбора соответствующих данных в зависимости от типа записи в отдельном свойстве.

    ... | Select-Object hostname ..., @{n='Data';e = {
        $rr = $_
        switch ($rr.RecordType) {
            'A'     {$rr.RecordData.IPv4Address}
            'CNAME' {$rr.RecordData.HostnameAlias}
            ...
        }
    }}
    

Итак, первый пункт 1 отлично работает, и спасибо вам за это, потому что что-то такое простое уже давно меня преследует. Часть 2, хотя я не могу приступить к работе, поскольку столбец данных возвращается пустым. Я изучаю это, но только предупреждаю о первом тесте.

Jamie Lawson 18.12.2018 17:14

Код: @ {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}}}}

Jamie Lawson 18.12.2018 17:26

@JamieLawson Мое плохое. $_ в блоках действий относится к совпавшему элементу (здесь $_.RecordType), у которого нет свойств, которые вы хотите раскрыть. См. Обновленный ответ.

Ansgar Wiechers 18.12.2018 17:59

Спасибо, это было исправление. Есть какая-нибудь информация для понимания изменения? Действительно смущен тем фактом, что я вижу, что вы устанавливаете $ rr = $ _, который мы уже использовали, а затем заменили все $ _ на $ rr. Если есть что-то, что я мог бы прочитать об этом или что-то в этом роде. В противном случае большое спасибо за помощь.

Jamie Lawson 18.12.2018 23:32

@JamieLawson Текущая объектная переменная $_ может иметь разные значения в зависимости от контекста, в котором она используется. В switch ($_.RecordType) { 'A' { $_.RecordData } ... } первый $_ и второй $_ относятся к разным объектам (первый - это объект, полученный из конвейера, второй - это значение, используемое при сравнении переключателей, то есть значение свойства RecordType). Присваивая $_ обычной переменной ($rr) до, оператор switch гарантирует, что вы ссылаетесь на тот же объект в тестовом значении и блоков действий.

Ansgar Wiechers 18.12.2018 23:45

Другие вопросы по теме