2017-02-17 41 views
1

テーブルの変数を置き換えようとしていますが、できないようです。 pingが成功で、私はSuccess下の値が1に変更することにしたい、しかし、関係なく、私は何をすべきか、それは0 $pingは現在、このような何かを返しとどまるません:pingが成功したときにオブジェクト値を変更できません

+-------------------+----------+ 
|  Hostname  | Success | 
+-------------------+----------+ 
| BVL-W71455781745 |  0 | 
| BVL-WX966103545 |  0 | 
| BVL-W7583554017 |  0 | 
+-------------------+----------+ 
$ping = Import-csv C:\temp\pingtst.csv -Header 'Hostname' | Select-object *,@{Name='Success';Expression={'0'}} 
$i = 0 
foreach ($HostName in $ping.Hostname) { 

if (Test-Connection -ComputerName $HostName -count 3 -Quiet) 
    { 
     $ping.Success[$i] = '1' 
     $i = ($i + 1) 
     } else 

     {$ping.Success[$i] = '0' 
     $i = ($i + 1) 
     } 
     } 
+0

あなたはそれがすべてであなたが '$ ping.Hostname'または' $ ping.Success'を書くことができますことを、 "メンバーの列挙"(PowerShellのV3 +機能)を非難すべきです。 – PetSerAl

答えて

0

あなたのアールをあなたのオブジェクトを特異な方法で繰り返します。また、あなたは正しい要素に配列をインデックスしていません。私はまだ技術的な説明を持っていますがないときリターン正しい行に正しい値を行い

$ping.Success[$i] 

ので

のような成功の索引。ただし、 に直接アクセスすると、にその行の値が設定されていません。この場合、デフォルト値の0がそのまま残ります。

代わりにこのようなことをした場合、期待していた結果が得られます。あなたのオブジェクト配列を介して動作するより良い方法があるよう

$ping[$i].Success 

全体$i

は、いずれかの必要はありません。

$results = Import-csv C:\temp\pingtst.csv -Header 'Hostname' | 
    Select-object hostname,@{Name='Success';Expression={'0'}} | 
    ForEach-Object{ 
     # Test the connection. Since the value is already 0 only change on success 
     if (Test-Connection -ComputerName $_.Hostname -count 3 -Quiet){ 
      $_.Success = 1 
     } 
     # Send this row down the pipeline 
     $_ 


} 

# This should look like you expect now. 
$results 
+0

ありがとう!これはうまくいった。私は、PowerShellとコーディングに一般的なので、私のやり方は違っています...異なっています。私はあなたの助けに感謝します! – NovaPrice

関連する問題