Тест для локального хоста в Powershell?

8

У меня есть Powershell скрипт , который вызывает Get-WmiObjectс -Credential. Тем не менее, это ошибки, если я запускаю его на локальном компьютере:

Get-WmiObject : User credentials cannot be used for local connections

Как правильно добавить логику if localhost, чтобы избежать этой ошибки? Или есть лучший способ?

Кайл Брандт
источник
Как вы передаёте параметр computername?
Кристофер
@Christopher: По IP (10.xxx) не так уж много контроля над этим, поскольку приложение запускает его.
Кайл Брандт

Ответы:

3

Вы всегда можете запросить локальный IP-адрес через WMI и сохранить его в $ localIP, а затем сопоставить его с тем адресом, который сейчас находится в вашем конвейере или массиве:

if ($localIP -eq $otherIP) { get-wmiobject without -credential }    
else { existing query }
MDMarra
источник
2

Если вы поместите его в блок try catch с ошибкой stop в первой команде, он перехватит ошибку и запустит блок catch без учетных данных.

Try
{
Get-WmiObject -Credential domain\user -ComputerName localhost -class Win32_BIOS -erroraction Stop
}
Catch
{
Get-WmiObject -ComputerName localhost -class Win32_BIOS
}
Кристофер
источник
Позволяет ли PS поймать конкретное исключение для ошибки, которую я получаю?
Кайл Брандт
Если вы знаете класс исключений .NET, вы можете сделать это следующим образом ... catch [System.Net.SomeWMIExceptionClass] {код идет сюда}
Кристофер
Я не прав. В ответ на этот вопрос stackoverflow.com/questions/3097785/… и некоторые тесты, которые я проводил, PowerShell оборачивает исключение, чтобы вы не могли перехватить определенные ошибки.
Кристофер