我正在檢查在一組計算機上使用WMI的服務,但有一些出現錯誤。我如何捕獲這些錯誤,以便採取適當的行動?powershell捕獲wmi查詢的異常代碼
查詢是
$listOfServices = Get-WmiObject -credential $wsCred -ComputerName $comp.name -Query "Select name, state from win32_Service"
如果我碰到下面我想嘗試其他憑據
Get-WmiObject : Access is denied. (Exception from HRESULT: 0x80070005 (E_ACCESSDENIED))
如果我得到Get-WmiObject : User credentials cannot be used for local connections
我想如果我得到Get-WmiObject : The RPC server is unavailable. (Exception from HRESULT: 0x800706BA)
刪除憑據
或任何其他錯誤,我只是想報告錯誤。
我知道我應該使用try catch塊,但我不知道如何爲每個異常指定catch。
這裏是我迄今爲止 -
try {
$listOfServices = Get-WmiObject -credential $wsCred -ComputerName $comp.name -Query "Select name, state from win32_Service" -ErrorAction Stop
}
catch {
$e = $_.Exception
switch ($e.ErrorCode) {
0x80070005 {
$listOfServices = Get-WmiObject -credential $svrCred -ComputerName $comp.name -Query "Select name, state from win32_Service" -ErrorAction Stop
}
default {
write "Error code: $e.ErrorCode"
write "Error details: $e.ErrorDetails"
write "Full error: $e"
}
}
}
這似乎不工作,因爲$ e.errorcode返回的不僅僅是代碼這是一些輸出的整個消息 - System.UnauthorizedAccessException:訪問被拒絕。 (來自HRESULT的異常:0x80070005(E_ACCESSDENIED)) at System.Runtime.InteropServices.Marshal.ThrowExceptionForHRInternal(Int32 errorCode,IntPtr errorInfo) – user2369812
@ user2369812在這種情況下,請使用'HResult'屬性。您可能還需要設置'$ ErrorActionPreference'而不是使用'-ErrorAction'。查看更新的答案。 –