2017-08-16 5 views
0

J'ai eu ce script en ligne. Au moins, je pourrais comprendre comment exporter les données vers un fichier CSV. Cela s'est avéré être si loin de mes capacités. J'ai essayé Export-Csv et pipe, mais aucun n'a eu de succès.Comment puis-je modifier ce script PowerShell pour exporter les deux sections vers un fichier CSV sans couper de données?

J'ai eu une tentative réussie, mais toutes les données ont été placées dans une colonne et coupées, le paramètre -Width n'a pas résolu cela non plus. Le reste du temps, je reçois juste des informations aléatoires comme Length ou ce qui semble être des données corrompues avec un nombre et des lettres brouillés.

Tout ce script exécute ping et nslookup sur une liste d'adresses IP. Je veux le déplacer vers un fichier CSV afin que je puisse trier les données et trouver les adresses IP vides/non utilisées pour nettoyer notre espace IP ou même identifier les problèmes dans notre DNS.

$InputFile = 'C:\Temp\list.txt' 
$addresses = Get-Content $InputFile 
$reader = New-Object IO.StreamReader $InputFile 
while ($reader.ReadLine() -ne $null) { $TotalIPs++ } 
Write-Host "" 
Write-Host "Performing nslookup on each address..."  
foreach ($address in $addresses) { 
    ## Progress bar 
    $i++ 
    $percentdone = (($i/$TotalIPs) * 100) 
    $percentdonerounded = "{0:N0}" -f $percentdone 
    Write-Progress -Activity "Performing nslookups" -CurrentOperation "Working on IP: $address (IP $i of $TotalIPs)" -Status "$percentdonerounded% complete" -PercentComplete $percentdone 
    ## End progress bar 
    try { 
     [System.Net.Dns]::Resolve($address) | Select HostName, AddressList 
    } catch { 
     Write-Host "$address was not found. $_" -ForegroundColor Green 
    } 
} 
Write-Host "" 
Write-Host "Pinging each address..." 
foreach($address in $addresses) { 
    ## Progress bar 
    $j++ 
    $percentdone2 = (($j/$TotalIPs) * 100) 
    $percentdonerounded2 = "{0:N0}" -f $percentdone2 
    Write-Progress -Activity "Performing pings" -CurrentOperation "Pinging IP: $address (IP $j of $TotalIPs)" -Status "$percentdonerounded2% complete" -PercentComplete $percentdone2 
    ## End progress bar 
    if (Test-Connection -ComputerName $address -Count 2 -Quiet) { 
     Write-Host "$address responded" -ForegroundColor Green 
    } else { 
     Write-Warning "$address does not respond to pings"    
    } 
} 
Write-Host "" 
Write-Host "Done!" 

Répondre

0

simplifier, simplifier ...

Get-Content $InputFile | ForEach-Object { 
    $ip = $_ 

    try { 
     $dns = [Net.Dns]::Resolve($ip) 
    } catch { 
     Write-Host "$address not found.`n$_" 
    } 

    New-Object -Type PSObject -Property @{ 
     'Address'  = $ip 
     'Hostname' = $dns.Hostname 
     'AddressList' = $dns.AddressList 
     'Online'  = [bool](Test-Connection $ip -Count 2 -Quiet) 
    } 
} | Export-Csv 'C:\path\to\output.csv' -NoType 
+0

Je vous remercie pour la réponse. Mais je ne comprends pas entièrement ce qui se passe dans ce script. Certains d'entre eux je comprends, mais ... je suppose que je devrais jouer avec et voir ce qui se passe. –

+0

Qu'est-ce que vous ne comprenez pas sur le code? Il lit les adresses du fichier d'entrée, résout chaque adresse en nom d'hôte et construit un objet personnalisé avec le nom d'hôte, les adresses et l'état en ligne, puis exporte les objets vers un fichier CSV. Les objets personnalisés sont ce que 'Export-Csv' attend en entrée. –

+0

Ah je vois. Je ne suis pas familier avec PS. Désolé pour la réponse tardive. Merci beaucoup. –