【问题标题】:dnsserverresourcerecord - all expanded properties and zonednsserverresourcerecord - 所有扩展属性和区域
【发布时间】:2018-12-17 22:35:47
【问题描述】:
Get-DnsServerResourceRecord -ComputerName server -ZoneName zone.com

我想运行此命令并获取 HostName、RecordType、ZoneName 和所有 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 将它们组合成一列?

【问题讨论】:

    标签: powershell dns customproperty


    【解决方案1】:
    1. 您可以像处理记录数据一样将区域名称添加为calculated property

      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 部分虽然我无法开始工作,因为 Data 列返回为空。我正在研究这个,但只是从第一次测试开始。
    • 代码:@{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 语句之前确保您在测试值 操作块中引用相同的对象.
    猜你喜欢
    • 2014-06-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-12-24
    • 2021-01-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多