Resolve-DnsName - 格式化和错误捕获

Aft*_*tab 6 dns powershell

我有一个域列表,我需要从中获取每个域的名称服务器列表以及名称服务器的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
Run Code Online (Sandbox Code Playgroud)

我把结果减少了一点.我希望IP地址与其余数据显示在同一行.一个快速谷歌向我展示了如何向现有对象添加哈希.

$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}}
Run Code Online (Sandbox Code Playgroud)

所以对于上述情况,这是"正确/最好的方式"还是你会推荐别的东西.

其次,一些结果失败了很多红色,我要捕获的重要信息是"DNS名称不存在","DNS服务器故障",还有其他几个.如何捕获相关错误,我假设我可以将其添加到新的哈希"列".我想不出在我的代码中使用try,catch块的方法吗?

Kir*_*ran 6

将结果捕获到变量中,这样就不必多次执行查询。无论如何,该变量中的数据都可以用于切片和切块。

如果要查询的主机名很多,只需将整个块放在下面的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
    }
}
Run Code Online (Sandbox Code Playgroud)