2013-07-29 20 views
9

PowerShellスクリプトの初心者です。私は自分の要求を満たすために探しています。PowerShellのファイルから行を読み込む方法

複数のホスト名とIPアドレスを持つhosts fileがあります。以下は入力ファイルの例です。

127.0.0.1 Host1 Host2 Host3 

127.0.0.2 Host4 Host5 Host6 

Iは、第一のホスト(ホスト1)のための各ラインとpingを読み取る第2のホスト(ホスト2)と第3のホスト(ホスト3)たいです。

各ホスト名にpingを実行している間、そのホストのping応答IPアドレスを確認し、入力ファイルに記載されているIPアドレスに戻します。以下は、上記の形式でファイルを読み込もうとしているコードのスニペットですが、そのようには動作しません。

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

PowerShellスクリプトで私に何か助言を与えてもらえますか?

答えて

1

私はPowerShellから何も見たことがありませんが、それはあなたのために役立つことを意味します。次のような 何か:

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

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

+0

ありがとうbrnopcmanしかし、Split関数がSystem.Object []にのみ含まれているため、エラーが発生しています。 for-eachには使用できません。 – sharsour

+0

OK、私は他の何かを見つける:http://stackoverflow.com/questions/4192072/how-to-process-a-file-in-powershell-line-by-line-as-a-stream –

14

は、次のアプローチを試してみてください。それは近いはずです。

$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を使用します。なぜなら、解決順序の最初のものですから、ホストファイル内のものと常に一致すると思います。 –

+0

ありがとうKeith、私はあなたのスクリプトを実行しようとしましたが、それは以下の問題を与えています。可変長ホストは読み取り専用または定数なので、上書きできません。 Dで :\ CEP \ TestScript.ps1:6文字:12 + foreachの<<<<($ $ホストにホスト){ + CategoryInfo:WriteError:(ホスト:String)を[]、SessionStateUnauthorizedAccessException + FullyQualifiedErrorId:VariableNotWritable – sharsour

+0

@sharsour doh、組み込み変数の名前を使用しました。私はそれを修正した。 –

関連する問題