Resolve-DnsName - 格式化和错误捕获
Resolve-DnsName - Formatting and Error Catching
我有一个域列表,我需要每个域的名称服务器列表以及名称服务器的 IP 地址。
格式化/更好的方法?
Resolve-DnsName google.com -Type NS -DnsOnly | Select Name, NameHost, IP4Address
Name NameHost IP4Address
---- -------- ----------
google.com ns1.google.com
google.com ns4.google.com
ns4.google.com 216.239.38.10
ns1.google.com 216.239.32.10
我把结果缩减了一点。我希望 IP 地址与其余数据出现在同一行。快速 google 向我展示了如何向现有对象添加哈希。
$dl = gc C:\domains.txt
$result = $dl |
Resolve-DnsName -Type NS -DnsOnly |
Where { $_.IP4Address -like '' } |
Select Name, NameHost, @{l="IPAddress";e={Resolve-DnsName google.com -Type A | Select -ExpandProperty IPAddress}}
那么对于以上内容,这是 'correct / best way' 还是您会推荐其他东西。
其次,一些结果因大量红色而失败,我想捕获的重要信息是 'DNS name does not exist'、'DNS server failure',还有一些其他信息。我如何捕获相关错误,我假设我可以将它添加到新哈希 'column'。我想不出在我的代码中使用 try, catch 块的方法?
将结果捕获到变量中,这样您就不必多次执行查询。来自变量的数据可以用来切片和切块。
如果您有很多主机名要查询,只需将下面的整个块放在 foreach
循环中即可。
$name = 'google.com'
try{
$dns = Resolve-DnsName -Name $name -Type NS -DnsOnly -ErrorAction Stop
$IPhash = @{}
$dns |
Where-Object Section -eq Additional |
ForEach-Object {
$IPhash.Add($_.name, $_.IP4Address)
}
$dns |
Where-Object Section -eq Answer |
Sort-Object NameHost |
Select-Object Name, NameHost,
@{N='IP'; E={$IPhash[$_.NameHost]}},
@{N='Status'; E={'Resolved'}}
} Catch{
[pscustomobject]@{
Name = $name
NameHost = ''
IP = ''
Status = $Error[0].Exception.Message
}
}
我有一个域列表,我需要每个域的名称服务器列表以及名称服务器的 IP 地址。
格式化/更好的方法?
Resolve-DnsName google.com -Type NS -DnsOnly | Select Name, NameHost, IP4Address
Name NameHost IP4Address
---- -------- ----------
google.com ns1.google.com
google.com ns4.google.com
ns4.google.com 216.239.38.10
ns1.google.com 216.239.32.10
我把结果缩减了一点。我希望 IP 地址与其余数据出现在同一行。快速 google 向我展示了如何向现有对象添加哈希。
$dl = gc C:\domains.txt
$result = $dl |
Resolve-DnsName -Type NS -DnsOnly |
Where { $_.IP4Address -like '' } |
Select Name, NameHost, @{l="IPAddress";e={Resolve-DnsName google.com -Type A | Select -ExpandProperty IPAddress}}
那么对于以上内容,这是 'correct / best way' 还是您会推荐其他东西。
其次,一些结果因大量红色而失败,我想捕获的重要信息是 'DNS name does not exist'、'DNS server failure',还有一些其他信息。我如何捕获相关错误,我假设我可以将它添加到新哈希 'column'。我想不出在我的代码中使用 try, catch 块的方法?
将结果捕获到变量中,这样您就不必多次执行查询。来自变量的数据可以用来切片和切块。
如果您有很多主机名要查询,只需将下面的整个块放在 foreach
循环中即可。
$name = 'google.com'
try{
$dns = Resolve-DnsName -Name $name -Type NS -DnsOnly -ErrorAction Stop
$IPhash = @{}
$dns |
Where-Object Section -eq Additional |
ForEach-Object {
$IPhash.Add($_.name, $_.IP4Address)
}
$dns |
Where-Object Section -eq Answer |
Sort-Object NameHost |
Select-Object Name, NameHost,
@{N='IP'; E={$IPhash[$_.NameHost]}},
@{N='Status'; E={'Resolved'}}
} Catch{
[pscustomobject]@{
Name = $name
NameHost = ''
IP = ''
Status = $Error[0].Exception.Message
}
}