2017-02-07 19 views
0
$data = @("server1","server2","server3") 

foreach ($server in $data) { 
    $results = (Test-Connection $server -count 1 | Measure-Object -Property ResponseTime -Average).Average 
} 

ForEachの出力を取り込んで結果を配列に格納する方法を理解しようとしています。私はまだこれを行う方法を考え出すことができませんでした。ForEachの出力をpowershellの配列に格納する

+4

'$ results = @(ForEach(...){...})' – PetSerAl

+0

@PetSerAl、 '$ results = @(foreach ...)と' $ results = foreach ..の違いは何ですか?それでは、配列を返しませんか?また、何かを返すべきではありません、これが機能するためには? – 4c74356b41

+0

@ 4c74356b41 '@()'は常に配列を返します。ゼロまたは1項目の場合でも。 – PetSerAl

答えて

1

ForEachを実行すると、スカラー(単一)オブジェクトのプロパティの値を測定するだけです。平均値は常にそのプロパティの単なる値になります。

Test-Connectionは、-ComputerNameパラメータとして名前の配列を受け入れるので、ForEachは実際には必要ありません。

$data = @("server1","server2","server3") 

$results = Test-Connection $data -count 1 | select -ExpandProperty ResponseTime 
+0

私は、私がやっていることの概念を得るために例を使用しました。私はTest-Connectionを使用していませんが、より大きなスクリプトですが、概念は同じです。結果を配列に格納する方法を理解し、入力がなくなるまでループさせるだけでよいのです。 – Aaron

+0

あなたは既にあなたのコメントに答えがあります。 foreach出力を変数にリダイレクトするだけで、Powershellは複数のオブジェクトを返すと自動的に配列を作成します。 @()構文を使用すると、複数のオブジェクトを返さない場合のエラーを防ぐために、@()構文を使用して強制的に配列にすることができます。 – mjolinor

0
$FinalResult = @() 
    $data = @("server1","server2","server3") 
    foreach ($server in $data) { 
     $results = (Test-Connection $server -count 1 | Measure-Object -Property ResponseTime -Average).Average 

     $FinalResult += New-Object psobject -Property @{ 
         ServerName = $server 
         Result = $result 
         } 
    } 
    $FinalResult | Select ServerName, Result | Export-Csv ".\FinalResult.csv" -NoTypeInformation 

私はニードフルを行います、このスニペットが動作しない場合は私に知らせてください。

関連する問題