Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How to Get The Real RecordData from DnsServerResourceRecord Using Powershell?

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?

like image 204
Michael J Avatar asked Dec 18 '22 20:12

Michael J


1 Answers

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

... |Select-Object HostName, @{Name='RecordData';Expression={$_.RecordData.PtrDomainName}}
like image 52
Mathias R. Jessen Avatar answered Dec 27 '22 05:12

Mathias R. Jessen