我正在尝试获取IP列表并使用Powershell将其解析为DNS名称。如果主机无法解析我正在尝试将其写入错误文件。目前,该脚本在能够解析为主机名的IP上运行速度极快(低于10毫秒),但对于那些不能解析脚本的脚本需要较长的时间(每个IP大约需要4500毫秒)。我尝试在非解析IP上只计算DNS解析时间,当它们失败时我得到大约65毫秒,所以我不确定是什么在分辨率上增加超过4000毫秒的额外拖动时间。当处理超过1,000个IP时,这将成为一个非常密集的计时过程。下面的脚本包含我一直用于解决问题的测量命令语句。
$ips = get-content ".\source_ip.txt"
$outFile = ".\resolvedTest.txt"
$errorFile = ".\resolveErrorTest.txt"
$commandTimes = @()
foreach ($ip in $ips){
$measure = Measure-Command{
try {[string] $hostname = [System.Net.Dns]::GetHostByAddress($ip).HostName}
catch [system.exception]{$hostname = $ip}
$hostname = $hostname.Replace("@{HostName=","")
$hostname = $hostname.Replace("}","")
if ($hostname -eq $ip){
Add-Content $errorFile "$hostname, Error"
} else {
Add-Content $outFile "$ip, $hostname"
}
}
Write-Host $measure.TotalMilliseconds
$commandTimes += ,$measure.TotalMilliseconds
}
答案 0 :(得分:0)
我试图删除不必要的陈述:
$ips = "127.0.0.1", "127.0.0.1"
$outFile = "c:\resolvedTest.txt"
$errorFile = "c:\resolveErrorTest.txt"
foreach ($ip in $ips){
$measure = Measure-Command {
try {
$hostname = [System.Net.Dns]::GetHostByAddress($ip).HostName
}
catch {
$hostname = $false
}
}
if($hostname) {
Write-Host ("$ip was successfully resolved to $hostname ({0:N0}ms elapsed)" -f $measure.TotalMilliseconds) -ForegroundColor Green
} else {
Write-Host ("$ip was not resolved ({0:N0}ms elapsed)" -f $measure.TotalMilliseconds) -ForegroundColor Red
}
}
不知道这会更快。