2017-12-21 15 views
3

Ich versuche derzeit, eine CSV-Datei zu erhalten, die die IP-Adresse von Domänen und die Domäne selbst zeigt. Ich würde das manuell tun, aber ich teste fast 1K-Domains.DNS-Adresse mit mehr als einer IP auflösen

Dies ist mein aktueller Code:

$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 

Das Problem, das ich habe, ist, dass einige Bereiche mehr als 1 IP-Adresse haben, und wenn ich die CSV-Datei zu öffnen, erhalte ich ein System.Object[] für die Domains mit mehr als 1 IP. Zum größten Teil habe ich Resolve-DnsName inside Test-Connection verwendet, um diesen Code zu erstellen, aber das Problem tritt wieder auf, wenn mehr als 1 IP vorhanden ist.

Danke!

Antwort

3

CSV Versteht die Array-Objekte nicht, nur Klartext.

Sie die IP-Mitglied werden kann (wenn mehr als eine) Komma (oder jedes andere Zeichen) kurz vor dem Export-CSV Cmdlets, wie dies mit:

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

Eine weitere Option hinzuzufügen, ist eine weitere Zeile für jede IP, aber Sie müssen Ihren Code ein wenig ändern:

$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 
+0

Vielen Dank !!!! Beides hat super funktioniert, bei mir hat die zweite Option besser funktioniert! – IPew

Verwandte Themen