2011-11-10 53 views
2

在PowerShell中,我可以使用Catch [System.UnauthorizedAccessException]捕获Access is Denied错误。我该如何捕获RPC Server Unavailable错误?捕获RPC服务器不可用错误HRESULT:0x800706BA

+0

我觉得这是更细节的错误: '获取-WmiObject可以:RPC服务器不可用。 (来自HRESULT的异常:0x800706BA) 在C:\ Users \ flickerfly \ Documents \ scripts \ Set-LocalServerAdmin.ps1:22 char:33 + $ oldexists = Get-WmiObject <<<< Win32_UserAccount -Filter“Name ='$ olduser'“-C计算机名$ computerName + CategoryInfo:InvalidOperation:(:) [Get-WmiObject],COMException + FullyQualifiedErrorId:GetWMICOMException,Microsoft.PowerShell.Commands.GetWmiObjectCommand' – flickerfly

回答

2

你可以捕捉到你想要的每个异常。只需写:

$_.Exception.GetType() 

在你的catch里面看看有什么异常,然后抓住它。

+0

这是一个非终止错误。 – flickerfly

4

如果您将通用参数-ErrorAction Stop添加到(在我的情况中为get-wmiobject命令),它将导致命令将此非终止错误作为终止错误作出响应,并将其放回执行状态。

这是我用于此目的的代码。我可能应该更具体的抓住,但它现在工作。

# Is this machine on network?, if not, move to next machine 
If (!(Test-Connection -ComputerName $computerName -Count 1 -Quiet)) { 
    Write-Host "$computerName not on network." 
    Continue # Move to next computer 
} 

# Does the local Administrator account exist? Returns a string if it exists, which is true-ish. 
try { 

    $filter = "Name='$olduser' AND Domain='$computerName'" 
    $account = Get-WmiObject Win32_UserAccount -Filter $filter -ComputerName $computerName -ErrorAction Stop 

} catch { 

    Write-Warning "$computerName Can't check for accounts, likely RPC server unavailable" 
    Continue # Move to next computer 

} #end try 
+0

你在$ olduser变量中写什么? Loacl管理员用户名? – Bomberlt

+0

这是我的一部分脚本正在更改管理员帐户的用户名我相信。 $ olduser是我更改为另一个用户名的用户帐户的名称。所以$ olduser可能会是“管理员”。 $账户将成为“管理员”账户对象(如果存在的话)。如果不是,那么它将不包括用户对象,并且显然不需要任何关注。 (已经过了一段时间,但我认为这就是它的工作原理。) – flickerfly

+1

看起来RPC服务器不可用错误没有被默认捕获,因此OP的问题可能(或者,* my *问题:)但是添加-ErrorAction Stop to我的GWMI能做到这一点,谢谢。 – Shoeless

相关问题