Перехват RPC-сервера недоступен Ошибка HRESULT: 0x800706BA

В powershell я могу поймать ошибку «Отказано в доступе», используя Catch [System.UnauthorizedAccessException]. Как мне аналогичным образом поймать ошибку RPC Server Unreachable?


person SeanFromIT    schedule 10.11.2011    source источник
comment
Я думаю, что это ошибка с более подробной информацией: Get-WmiObject : The RPC server is unavailable. (Exception from HRESULT: 0x800706BA) At C:\Users\flickerfly\Documents\scripts\Set-LocalServerAdmin.ps1:22 char:33 + $oldexists = Get-WmiObject <<<< Win32_UserAccount -Filter "Name='$olduser'" -ComputerName $computerName + CategoryInfo : InvalidOperation: (:) [Get-WmiObject], COMException + FullyQualifiedErrorId : GetWMICOMException,Microsoft.PowerShell.Commands.GetWmiObjectCommand   -  person Josiah    schedule 11.11.2012


Ответы (2)


Если вы добавите общий параметр -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
person Josiah    schedule 11.11.2012
comment
Что вы пишете в переменной $olduser? Имя пользователя администратора Loacl? - person Bomberlt; 03.09.2014
comment
Я полагаю, что скрипт, частью которого это было, менял имена пользователей для учетных записей администратора. $olduser было именем учетной записи пользователя, которую я изменил на другое имя пользователя. Таким образом, $olduser, вероятно, был бы администратором. Тогда $account будет объектом учетной записи администратора, если он существует. Если нет, то он не будет включать пользовательский объект и явно не будет нуждаться в каком-либо внимании. (Прошло некоторое время, но я думаю, что именно так это и сработало.) - person Josiah; 03.09.2014
comment
Кажется, что ошибка RPC Server Unreachable не обнаруживается по умолчанию, поэтому, возможно, вопрос OP (или моя проблема :) Но добавление -ErrorAction Stop к моему GWMI делает свое дело, спасибо. - person Shoeless; 27.02.2015

Вы можете поймать каждое исключение, которое хотите. Просто пиши:

$_.Exception.GetType()

внутри вашего улова, чтобы увидеть, какое исключение есть, а затем поймать его.

person Andrey Marchuk    schedule 18.11.2011