Get-WmiObject: сервер RPC недоступен. (Исключение из HRESULT: 0x800706BA)
Когда я запустил
Get-WmiObject win32_SystemEnclosure -Computer hostname | select serialnumber
он работает как для локальных, так и для удаленных хостов.
Когда я делаю это для списка хостов, использующих
ForEach ($_ in gc u:\pub\list.txt) {
Get-WmiObject win32_SystemEnclosure -Computer $_ | select serialnumber | format-table -auto @{Label="Hostname"; Expression={$_}}, @{Label="Service Tag"; Expression={$_.serialnumber}}
}
он возвращает
Get-WmiObject: сервер RPC недоступен. (Исключение из HRESULT: 0x800706BA)
Ответы
Ответ 1
Убедитесь, что в брандмауэре для каждого удаленного компьютера включено правило "Инструментарий управления Windows (WMI-In)".
Или в командной строке Administrative Command/Powershell:
netsh advfirewall firewall set rule group="Windows Management Instrumentation (WMI)" new enable=yes
Ответ 2
Возможно, это связано с различными проблемами. Я не могу сказать, какой из них есть в вашем случае.
Ниже приведены причины:
- DCOM не включен на ПК или на целевом ПК или на обоих.
- Ваш брандмауэр или даже ваш антивирус препятствуют доступу.
- Любая служба, связанная с WMI, отключена.
Некоторые службы, связанные с WMI, приведены ниже:
- Диспетчер автоматического подключения к удаленному доступу
- Диспетчер подключений удаленного доступа
- Удаленный вызов процедур (RPC)
- Локатор удаленных процедур (RPC)
- Удаленный реестр
Для настройки DCOM обратитесь:
- Ключ:
HKLM\Software\Microsoft\OLE
, Значение: EnableDCOM
Значение должно быть установлено на "Y".
Ответ 3
Возможно, ваш код не использует правильное имя машины, вы должны дважды проверить это.
Ваша ошибка:
Get-WmiObject: сервер RPC недоступен. (Исключение из HRESULT: 0x800706BA)
Это результат, который вы получаете, когда машина недоступна. Поэтому предложения брандмауэра разумны, но в этом случае, вероятно, не правильно, потому что вы говорите, что это работает:
Get-WmiObject win32_SystemEnclosure -Computer hostname
Итак, в вашем случае кажется, что эта строка выполняется:
Get-WmiObject win32_SystemEnclosure -Computer $_
$_ не содержит правильного имени компьютера. Вы можете проверить тип и содержимое $_. Вероятно, есть проблема с содержимым файла. Если файл выглядит правильно, возможно, строки не будут правильно завершены. Возможно, поближе посмотрите, используя Write-Host:
ForEach ($_ in gc u:\pub\list.txt) {
Write-Host "Get-WmiObject win32_SystemEnclosure -Computer '$_'"
Get-WmiObject win32_SystemEnclosure -Computer $_ | select serialnumber | format-table -auto @{Label="Hostname"; Expression={$_}}, @{Label="Service Tag"; Expression={$_.serialnumber}}
}
Ответ 4
Я нашел это сообщение в блоге, в котором предлагается добавить исключение брандмауэра для "удаленного администрирования", и это сработало для нас в наших системах Windows Server 2008 Enterprise.
http://mikefrobbins.com/2012/03/08/get-wmiobject-the-rpc-server-is-unavailable-exception-from-hresult-0x800706ba/
Ответ 5
Если вы пробовали некоторые из предложений в других ответах, наиболее заметно:
- Ответ Дэвида Брабанта: подтверждение включения правила входящего брандмауэра
Windows Management Instrumentation (WMI)
- Ответ Abhi_Mishra: подтверждение DCOM включено в реестре
Затем рассмотрим другие распространенные причины для получения этой ошибки:
- Удаленный компьютер выключен
- Вы указали недопустимое имя компьютера
- Существуют проблемы с подключением к сети между вами и целевым компьютером.
Ответ 6
У меня была такая же проблема с использованием foreach. Я сохранил список в $server и использовал это:
ForEach ($_ in $Servers) { Write-Host "Host $($_)" | Get-WmiObject win32_SystemEnclosure -Computer $_ | format-table -auto @{Label="Service Tag"; Expression={$_.serialnumber}}
}
Ответ 7
У меня была такая же проблема, но только с несколькими машинами. Я обнаружил, что использование Invoke-Command для запуска той же команды на удаленном сервере сработало.
Итак, вместо:
Get-WmiObject win32_SystemEnclosure -ComputerName $hostname -Authentication Negotiate
Используйте это:
Invoke-Command -ComputerName $hostname -Authentication Negotiate -ScriptBlock {Get-WmiObject win32_SystemEnclosure}
Ответ 8
Отключение брандмауэра разрешило это для меня.
Ответ 9
Думаю, я бы добавил, что мы также столкнулись с этой проблемой с несколькими машинами в нашем домене. Я создал список оскорбительных машин и добавил их все в текстовый файл, из которого можно запустить script. Я запускал это из приглашения CMD с использованием повышенных привилегий.
psexec @firewallFix.txt -d netsh advfirewall firewall
set rule name="Windows Management Instrumentation (WMI-In)"
profile=domain new enable=yes profile=domain
Ответ 10
решаемая.
Я столкнулся с тем же сообщением об ошибке при попытке выполнить следующую script (частичную) работу с удаленной виртуальной машиной, настроенной для работы в WORKGROUP.
Restart-Computer -ComputerName MyComputer -Authentication Default -Credential $cred -force
Я заметил, что могу запустить script из другой виртуальной машины в том же WORKGROUP, когда я отключил брандмауэр, но все равно не мог сделать это с машины в домене. Эти две вещи вместе с предложениями Stackflow привели меня к следующему решению:
Примечание. Измените эти параметры на свой страх и риск. Вы должны понимать последствия этих изменений безопасности перед их применением.
На удаленном компьютере:
- Убедитесь, что вы снова включили свой брандмауэр, если вы отключили его во время тестирования.
- Запуск Enable-PSRemoting из PowerShell с успехом
- Перейдите в wf.msc(брандмауэр Windows с повышенной безопасностью)
- Подтвердить правило приватного/открытого входящего ' управления Windows (DCOM-In)' включено И, чтобы свойство "Удаленный адрес" было "Любое" или что-то более безопасное.
- Подтвердить правило приватного/открытого входящего подключения Управление инструментами управления Windows (WMI-In) ' И убедитесь, что для свойства "Удаленный адрес" указано "Любой" или что-то более безопасное.
Необязательно. Вам также может потребоваться выполнить следующие действия, если вы хотите запускать команды типа Enter-PSSession.
- Подтвердить приватное/общедоступное входящее ' Управление Windows
Правило "Инструментарий (ASync-In)" включено И, убедитесь, что
Свойство "Удаленный адрес" - "Любой" или что-то более безопасное.
- Откройте входящий TCP-порт до 5985
ВАЖНО!. Он берет мою удаленную виртуальную машину примерно через 2 минуты после ее перезагрузки, чтобы ответить на команду "Enter-PSSession", даже если другие сетевые службы запускаются без проблем. Дайте ему пару минут, а затем попробуйте.
Боковое примечание: Прежде чем изменить свойство "Удаленный адрес" на "Любой" , оба правила были установлены в "Локальная подсеть".
Ответ 11
Включение следующих правил FW в целевой системе разрешило проблему на Win2k16:
- Инструментарий управления Windows (WMI-In)
- Координатор распределенных транзакций (RPC)
- Координатор распределенных транзакций (RPC-EPMAP)
Ответ 12
Я только что пришел к той же самой проблеме и нашел ответ здесь: http://powershellcommunity.org/Forums/tabid/54/aft/7537/Default.aspx
У меня были пробельные символы в конце каждой строки входного файла. Если ваш файл тоже работает, просто удалите их, и ваш script должен работать.
Ответ 13
Я делал эту ошибку
ForEach ($server in $servers) {
$OS = Get-WmiObject win32_operatingsystem -ComputerName $server
}
Что, конечно, не может быть передано, поскольку вывод сервера в файл csv был @{Name = hv1g.contoso.com}
Мне пришлось вызвать свойство из файла csv, как этот $server.Name
ForEach ($server in $servers) {
$OS = Get-WmiObject win32_operatingsystem -ComputerName $server.Name
}
Он исправил мою проблему.