我正在使用 PowerShell 从 Active Directory DNS 服务器中提取信息,但无法获取所需的数据。
具体来说,我试图获取属于特定子网的主机名称,10.104.128.x
.
当我使用以下命令时:
Get-DnsServerResourceRecord -ComputerName AD_DNS_SERVER -ZoneName 104.10.in-addr.arpa -RRType Ptr | Where-Object {$_.HostName -like '*.128'}`
我得到如下所示的输出:
主机名 RecordType 时间戳 TimeToLive RecordData
-------- ---------- --------- ---------- ----------
104.128 PTR 10/19/2015 3:00:0... 00:15:00 adl5c260a86ba79.XYZ.net。
11.128 PTR 12/29/2015 6:00:0... 00:15:00 adl3c970e8d7166.XYZ.net。
110.128 PTR 1/29/2012 11:00:0... 00:15:00 nroxitow7tst.ABC.com。
114.128 PTR 1/20/2012 7:00:00 AM 00:15:00 adl5c260a86c29e.ABC.com
我真正想要的是第一列( HostName
),其中包含 IP 的最后两个八位字节;第五列 ( RecordData
),其中包含分配 IP 的主机的名称。
主机名是我真正想要/需要的数据。我看到它就在那里!
所以我使用了 select
命令来减少管道系统中的输出。新命令如下所示:
Get-DnsServerResourceRecord -ComputerName AD_DNS_SERVER -ZoneName 104.10.in-addr.arpa -RRType Ptr | Where-Object {$_.HostName -like '*.128'} |选择主机名,记录数据
但输出看起来像这样:
主机名记录数据
————————————
104.128 DnsServerResourceRecordPtr
11.128 DnsServerResourceRecordPtr
110.128 DnsServerResourceRecordPtr
114.128 DnsServerResourceRecordPtr
虽然没有给我主机名。只是对象的类型RecordData
是但不是对象包含的数据,也许?
我还尝试将输出通过管道传输到 CSV 并得到相同的结果。
然后我试着看 DnsServerResourceRecord
具有 Get-Member
的对象属性.这向我展示了该对象有一个名为 PSComputerName
的属性。 .我想也许这会有主机的名字,但当我尝试 select
时却是空白的。它。
然后我在谷歌上搜索了一下,找到了几页推荐了几种使用 RecordData.ipv4address 将数据从 DnsServerResourceRecordPtr
中引出的方法。对象,但我还没有让他们中的任何一个工作。输出仍然打印空白。
所以我的问题是:是否存在从 PTR 记录中获取实际主机名的可靠方法?
请您参考如下方法:
选择 PtrDomainName
属性(property)来自 DnsServerResourceRecordPtr
对象,使用计算属性:
... |Select-Object HostName, @{Name='RecordData';Expression={$_.RecordData.PtrDomainName}}