我需要为指定的子网生成所有DNS记录的列表。有没有办法使用powershell DNS cmdlet,DNSCMD或其他任何东西,这不是我目前使用的非常慢的方式?
我在17.(7,8,9).162.(16-238)
枚举主机名。
$HostList = @()
ForEach ($a in 7..9) {
ForEach ($b in 16..238) {
$DNSCheck = Resolve-DNSName "17.$a.162.$b"
$HostList += ($DNSCheck.NameHost)
}
}
Write-Host $HostList
我最终使用的内容 - 非常感谢Ansgar。
$ZoneName = "some.domain"
$DNSHost = "dnsserver"
$Hosts = Get-DnsServerResourceRecord $ZoneName -ComputerName $DNSHost -RRType 'A' |? {
$Address = $_.RecordData.IPV4Address.ToString()
$LastOctet = $Address.Split(".")[-1]
$Address -like "17.[7-9].162.*" -and $LastOctet -in 16..238
}
ForEach ($H in $Hosts) {
Write-Host $H.HostName
}
答案 0 :(得分:1)
使用PowerShell DNS cmdlet并借用this answer中的代码,您可以执行以下操作:
$zone = 'example.com'
$range = '17.7.162.16', '17.7.162.238'
function Addr2UInt($addr) {
$bytes = $addr.GetAddressBytes()
[array]::Reverse($bytes)
[BitConverter]::ToUInt32($bytes, 0)
}
$addrFrom = Addr2UInt ([Net.IPAddress]::Parse($range[0]))
$addrTo = Addr2UInt ([Net.IPAddress]::Parse($range[1]))
Get-DNSServerResourceRecord $zone -RRType 'A' | ? {
$addr = Addr2UInt $_.RecordData.IPv4Address;
$addrFrom -le $addr -and $addr -le $addrTo
}
IPAddress
个对象无法使用-le
之类的运算符进行比较,但由于IP(v4)地址基本上是32位数字,因此您可以将地址的字节转换为数字比较:
$bytes = $addr.GetAddressBytes()
(($bytes[0] * 256 + $bytes[1]) * 256 + $bytes[2]) * 256 + $bytes[3]
ToUInt32()
方法提供了一种更优雅的方式来进行此转换(也更明显地发生了什么),但由于该方法需要最低索引处的最低有效字节数组必须先颠倒过来。
该函数只是为了方便而包装转换代码,因为我需要在脚本中的3个位置。
答案 1 :(得分:0)
这是我找到的最佳方式
$Zone = YourDomain.local
Get-DnsServerResourceRecord -ZoneName $Zone -RRType A | Where-Object {$_.RecordData.ipv4address -like "192.168.39.*"}
答案 2 :(得分:-1)
对您的IP地址使用此GridView和过滤器
$server = "Your_DNS_Server"
$record = Get-WmiObject -Namespace "root\MicrosoftDNS" -ComputerName $server -Class MicrosoftDNS_AType
$record | Select DomainName,RecordData,OwnerName | Sort-Object -Property {[System.Version]$_.RecordData} | Out-GridView
对IP地址进行排序由[System.Version]
完成[system.version]("17.7.162.238")
Major Minor Build Revision
----- ----- ----- --------
17 7 162 238