2013-07-29 28 views
9

'daki bir dosyadan satır okuması PowerShell komut dosyasına yeni başlıyorum. Benim ihtiyacım olanı yerine getirmek için arıyorum.PowerShell

Birden çok ana bilgisayar adı ve IP adresi olan bir hosts file sahibim. Aşağıda giriş dosyasının örneği verilmiştir.

127.0.0.1 Host1 Host2 Host3 

127.0.0.2 Host4 Host5 Host6 

ilk konak için her satırı ve ping (host1), daha sonra ikinci bir ana bilgisayar (Anasistem2) ve daha sonra üçüncü ana bilgisayar (Host3) okumak istiyorum.

Her bir ana bilgisayar adına ping işlemi yaparken, o ana bilgisayar için ping yanıtı IP adresini kontrol etmem ve giriş dosyasında belirtilen IP adresiyle eşleştirmem gerekir. Aşağıda, yukarıdaki biçimde dosyayı okumaya çalıştığım kodun pasajı var, ancak bu şekilde çalışmıyor.

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

kimse bana benim için PowerShell komut herhangi bir tavsiye veya kırbaç birşeyler verebilir?

cevap

1

Hiç bir zaman PowerShell'den hiçbir şey görmedim, ama sizin için yararlı olabileceğini kastediyorum. Aşağıdaki gibi şey:

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

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

+0

Teşekkür brnopcman, Ama hatayı veriyor. Her biri için kullanılamaz. – sharsour

+0

tamam, başka bir şey buluyorum: http://stackoverflow.com/questions/4192072/how-to-process-a-file-in-powershell-line-by-line-as-a-stream –

14

aşağıdaki yaklaşımı deneyin. Yakın olmalı. Split işlevi [] sadece System.Object'de içerdiği gibi

$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', IP'yi ana bilgisayar dosyasından ilk olarak çözünürlük sırasına göre kullanacaktır, bu yüzden her zaman ana bilgisayar dosyasındaki neyin eşleşeceğini düşünüyorum. –

+0

Teşekkürler Keith, senaryonuzu çalıştırmayı denedim ama aşağıdaki konuları veriyor. Değişken Ana Bilgisayarın üzerine yazılabilir, çünkü salt okunur veya sabittir. D de : \, CEP \ TestScript.ps1: 6 karakter: 12 + foreach <<<< ($ $ konakçılarda ana) { + CategoryInfo: WriteError: (ana: String) [], SessionStateUnauthorizedAccessException + FullyQualifiedErrorId: VariableNotWritable – sharsour

+0

@sharsour doh, yerleşik bir değişkenin adını kullandı. Onu tamir ettim. –