【问题标题】:Resolve-DnsName - Formatting and Error CatchingResolve-DnsName - 格式化和错误捕获
【发布时间】:2015-07-06 23:26:10
【问题描述】:

我有一个域列表,我需要其中的每个域的名称服务器列表和名称服务器的 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 地址与其余数据出现在同一行。一个快速的谷歌向我展示了如何向现有对象添加哈希。

$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}}

那么对于上述内容,这是“正确/最佳方式”还是您会推荐其他方法。

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

【问题讨论】:

    标签: powershell dns


    【解决方案1】:

    将结果捕获到一个变量中,这样您就不必多次执行查询。变量中的数据可用于任意切片和切块。

    如果您有很多主机名要查询,只需将下面的整个块放在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
        }
    }
    

    【讨论】:

    • 我有一种感觉,我无法将完整的域列表直接通过管道传输到 resolve-dnsname。是否可以从 catch 块向 $dns 对象添加另一个“列/字段”?所以如果我有一个失败的查询,它将是:name namehost ip error blahblah.com DNS 失败。注意我不能格式化评论,blahblah.com 应该在名称标题下,“DNS Failed”应该在错误标题下,namehost 和 ip 为空。
    • 出于报告原因,我个人会将我的好数据与坏数据分开,但无论如何都要检查编辑后的解决方案。当解析成功时,添加一个“错误”列没有意义,所以我建议添加一个“状态”列,如图所示。
    • 完美,正是我想要的。它将被导出到 csv 文件中,可以根据需要对其进行过滤。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-08-01
    • 2018-07-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多