2014-06-05 4 views
0

$ Pingy = Get-WmiObject에서 일반적인 예외를 잡으려고 시도하는 중 Win32_PingStatus -f "Address = '$ Fip'"[예외] 캐치 [System.Exception] catch하고 그냥 잡으려고했습니다. powershell 버전 2 사용.일반적인 예외 잡기 - powershell

질문은 Get-WmiObject에 대한 일반적인 예외를 잡는 방법입니다. 나중에 pingSuccess가 true 또는 false인지 확인하여 진행 방법을 결정합니다. 지금은 항상 pingSuccess를 true로 설정합니다. 예외가 발생하면 원하지 않습니다. 심지어

Win32_PingStatus -f "Address='somenonsehere'" 

오류가 발생하지 않습니다처럼

function Ping 
{ 
    param($Fip) 
    try 
    { 
    $Pingy = Get-WmiObject Win32_PingStatus -f "Address='$Fip'" 

    return New-Object PSObject -Property @{ 
     pingSuccess=$true 
     ex=$null 
     code=$Pingy.statuscode 
     } 
    } 
    catch [System.Exception] 
    { 
    return New-Object PSObject -property @{ 
     ex=$_.Exception 
     pingSuccess=$false 
     } 
# write-host $exc.gettype() 
# write-host $exc.message 
# write-host $exc.innerException 
    } 
} 
+0

안녕하세요 : 예를 들어 ? –

+0

위 업데이트^ – user3700372

+0

'get-help about_return' .. try에서 함수를 항상 종료하면 catch가 실행되지 않습니다. – Cole9350

답변

0

는 것 같습니다. 그렇게하면 아무 것도 얻을 수 없지만 컴퓨터가 pingable인지 아닌지 여부를 감지하는 것이 목적이라면, 스크립트를 조금만 변경하면됩니다. 당신이 당신의 질문/문제가 무엇인지 명확히 할 수 -

function Ping 
{ 
    param($Fip) 
    $pingStatus=$false       
    if ((Get-WmiObject Win32_PingStatus -f "Address='$Fip'").StatusCode -eq 0) { 
      $pingStatus=$true 
      #$code=0 ## if you want the code, but you already know that.       

    } 
     New-Object PSObject -Property @{ 
      pingSuccess=$pingStatus 
      # code=0 
} 

}