2017-02-17 63 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

您應該責怪「成員枚舉」(PowerShell v3 +功能),它可以讓您編寫'$ ping.Hostname'或'$ ping.Success'。 – 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