【问题标题】:Resolve DNS address with more than one IP解析具有多个 IP 的 DNS 地址
【发布时间】:2018-06-04 09:30:44
【问题描述】:

我目前正在尝试获取显示域 IP 地址和域本身的 CSV 文件。我会手动执行此操作,但我正在测试接近 1K 的域。

这是我当前的代码:

$Domains = Get-Content "X:\User\URLs.txt"
$collection = $()

foreach($Domain in $Domains)
   {
    Write-Host "Testing $Domain"
    $status = @{ "Domain" = $Domain}
    $result = [system.net.dns]::GetHostAddresses($Domain)

    if($result)
    {
        $status.Results = "UP"
        $status.IP = [system.net.dns]::GetHostAddresses($Domain).IPAddressToString
        Write-Host "GOOD"        
    }#END If

    else
    {
        $status.Results = "Down"
        $status.IP = "N/A"
        $status.DNS = if (-not(Resolve-DnsName -Name $Domain -ErrorAction SilentlyContinue))
        {
         Write-Output -Verbose "$Domain -- Not Resolving"
        }#END inner if

        else
        {
        "$Domain resolving"
        }#END inner else

    }#END else

    New-Object -TypeName PSObject -Property $status -OutVariable domainStatus
    $collection += $domainStatus

}#END forEach
$collection | Export-Csv -LiteralPath "X:\User\DomainList.csv" -Append -Force

我遇到的问题是某些域有超过 1 个 IP 地址,当我打开 CSV 文件时,我会为超过 1 个 IP 的域得到一个 System.Object[]。在大多数情况下,我使用Resolve-DnsName inside Test-Connection 创建此代码,但同样,问题是当 IP 超过 1 个时。

谢谢!

【问题讨论】:

    标签: powershell csv dns ip


    【解决方案1】:

    CSV 不理解 Array 的对象,只能理解纯文本。

    您可以在 Export-CSV cmdlet 之前使用逗号(或任何其他字符)加入 IP(如果不止一个),如下所示:

    $Collection | Select Domain,@{N="IP";E={$_.IP -join ','} },Results |
    Export-Csv -LiteralPath "X:\User\DomainList.csv" -Append -Force
    

    另一种选择是为每个 IP 添加另一行,但您需要稍微修改一下代码:

    $Domains = 'google.com','microsoft.com' 
    $Collection = @()
    
    foreach ($Domain in $Domains)
    {
        Write-Host "Testing $Domain"
    
        Try {
    
            foreach ($IP in [system.net.dns]::GetHostAddresses($Domain).IPAddressToString)
            {
            $Row = "" | Select Domain,IP,Status
            $Row.Domain = $Domain
            $Row.IP = $IP
            $Row.Status = "UP"
            $Collection += $Row
            }
        }
    
        Catch 
        {
            $Row = "" | Select Domain,IP,Status
            $Row.Domain = $Domain
            $Row.Status = "DOWN"
            $Collection += $Row
        }
    }
    
    $Collection | Export-Csv -LiteralPath "X:\User\DomainList.csv" -Append -Force
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-09-27
      • 2014-11-03
      • 1970-01-01
      • 1970-01-01
      • 2016-12-01
      • 2014-06-18
      • 1970-01-01
      • 2021-10-08
      相关资源
      最近更新 更多