2013-07-29 19 views
9

Jestem początkującym skryptem PowerShell. Szukam spełnienia jednego z moich wymagań.Jak czytać wiersz z pliku w PowerShell

Mam jeden hosts file, który ma wiele nazw hostów i adresów IP. Poniżej znajduje się przykład pliku wejściowego.

127.0.0.1 Host1 Host2 Host3 

127.0.0.2 Host4 Host5 Host6 

chcę czytać każdą linię i ping dla pierwszego hosta (host1), a następnie drugiego hosta (host2), a następnie trzeci hosta (host3).

Podczas pingowania każdej nazwy hosta, muszę sprawdzić adres IP odpowiedzi ping dla tego hosta i dopasować go z powrotem do adresu IP wymienionego w pliku wejściowym. Poniżej znajduje się fragment kodu, który próbuję odczytać plik w powyższym formacie, ale nie działa w ten sposób.

$lines = Get-Content myfile.txt 
    $lines | 
    ForEach-Object{ 
     Test-Connection $_.Split(' ')[1] 
    } 

Czy ktoś może dać mi jakąś radę lub biczować coś w skrypcie PowerShell dla mnie?

Odpowiedz

1

Nigdy nie widziałem niczego z PowerShell, ale to może być pomocne dla ciebie. Coś jak następuje:

foreach ($line in $lines.Split('\r\n')){ 
    Test-Connection $line.Split(' ')[1] 
} 

http://en.wikipedia.org/wiki/Newline

+0

Dzięki brnopcman, ale podaje błąd, ponieważ funkcja Split jest zawarta tylko w System.Object []. Nie można go użyć dla każdego. – sharsour

+0

OK, znajdę coś innego: http://stackoverflow.com/questions/4192072/how-to-process-a-file-in-powershell-line-by-line-as-a-stream –

14

Spróbuj następujące podejście. Powinno być blisko.

$lines = Get-Content myfile.txt | Where {$_ -notmatch '^\s+$'} 
foreach ($line in $lines) { 
    $fields = $line -split '\s+' 
    $ip = $fields[0] 
    $hosts = $fields[1..3] 
    foreach ($h in $hosts) { 
     $hostIP = (Test-Connection $h -Count 1).IPV4Address.ToString() 
     if ($hostIP -ne $ip) { "Invalid host IP $hostIP for host $h" } 
    } 
} 
+0

'Test -Connection' użyje adresu IP z pliku hosta od momentu pierwszego w kolejności rozwiązywania, więc myślę, że zawsze będzie pasować do pliku hosta. –

+0

Dzięki Keith, próbowałem uruchomić twój skrypt, ale podaje on poniżej problemy. Nie można nadpisać zmiennej Host, ponieważ jest ona tylko do odczytu lub stała. w D: \ CEP \ TestScript.ps1 6 char 12 + foreach <<<< ($ gospodarza w $ gospodarzy) { + CategoryInfo: WriteError (host String) [] SessionStateUnauthorizedAccessException + FullyQualifiedErrorId: VariableNotWritable – sharsour

+0

@sharsour doh, użył nazwy wbudowanej zmiennej. Naprawiłem to. –

Powiązane problemy