How to Get The Real RecordData from DnsServerResourceRecord Using Powershell?

我怕爱的太早我们不能终老 提交于 2019-12-12 18:08:38

问题


I'm using PowerShell to extract information from an Active Directory DNS server and I'm having trouble getting to the data I want.

Specifically, I'm trying to get the names of hosts that belong to a particular subnet, 10.104.128.x.

When I use the following commands:

Get-DnsServerResourceRecord -ComputerName AD_DNS_SERVER -ZoneName 104.10.in-addr.arpa -RRType Ptr | Where-Object {$_.HostName -like '*.128'}`

I get output that looks like this:

HostName                  RecordType Timestamp            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

What I really want are the first column, (HostName), which has the last two octets of the IP; and the fifth column, (RecordData), which has the name of the host the IP is assigned to.

The hostname is the data I really want/need. And I see it right there!

So I used the select command to pare down the output in the pipe train. New command looks like this:

Get-DnsServerResourceRecord -ComputerName AD_DNS_SERVER  -ZoneName 104.10.in-addr.arpa -RRType Ptr | Where-Object {$_.HostName -like '*.128'} | select HostName, RecordData

But the output looks like this:

HostName RecordData                
-------- ----------               
104.128  DnsServerResourceRecordPtr
11.128   DnsServerResourceRecordPtr
110.128  DnsServerResourceRecordPtr
114.128  DnsServerResourceRecordPtr

Dosen't get me the hostname though. Just the type of object the RecordData is but not the data that the object contains, perhaps?

I also tried piping the output to CSV and got the same result.

Then I tried looking at the DnsServerResourceRecord object properties with Get-Member. That showed me the object had a property called PSComputerName. I thought maybe that would have the name of the host but that came up blank when I tried to select it.

I then Googled around a bit and found a few pages that recommended a few ways to use RecordData.ipv4address to coax the data out of the DnsServerResourceRecordPtr object but I haven't gotten any of them to work yet. Output still prints blanks.

So my question is: does a reliable method exist for getting the actual hostname from a PTR record?


回答1:


To select the PtrDomainName property from the DnsServerResourceRecordPtr object, use a calculated property:

... |Select-Object HostName, @{Name='RecordData';Expression={$_.RecordData.PtrDomainName}}


来源:https://stackoverflow.com/questions/35097158/how-to-get-the-real-recorddata-from-dnsserverresourcerecord-using-powershell

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!