2017-02-17 1 views
1

테이블의 변수를 바꾸려고하는데 그럴 수 없습니다. 성공적인 핑, 나는 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

감사합니다! 이것은 훌륭하게 작동했습니다. Im powershell에 익숙하지 않으며 일반적으로 코딩하기 때문에 제 일하는 방식이 다릅니다. 도와 줘서 고마워! – NovaPrice

관련 문제