Test auf Localhost in Powershell?

8

Ich habe ein Powershell-Skript, Get-WmiObjectmit dem aufgerufen wird -Credential. Dieser Fehler tritt jedoch auf, wenn ich ihn auf dem lokalen Computer ausführe:

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

Was ist der richtige Weg, um eine if localhost-Logik hinzuzufügen, um diesen Fehler zu vermeiden? Oder gibt es einen besseren Weg?

Kyle Brandt
quelle
Wie übergeben Sie den Computernamen-Parameter?
Christopher
@Christopher: Über IP (10.xxx) haben Sie nicht viel Kontrolle darüber, da eine Anwendung es ausführt.
Kyle Brandt

Antworten:

3

Sie können die lokale IP-Adresse jederzeit über WMI abfragen und in $ localIP speichern und diese dann mit der Adresse vergleichen, die derzeit in Ihrer Pipeline oder Ihrem Array als Nächstes angegeben ist:

if ($localIP -eq $otherIP) { get-wmiobject without -credential }    
else { existing query }
MDMarra
quelle
2

Wenn Sie es beim ersten Befehl in einen try catch-Block mit erroraction stop einschließen, wird der Fehler abgefangen und der catch-Block ohne Anmeldeinformationen ausgeführt.

Try
{
Get-WmiObject -Credential domain\user -ComputerName localhost -class Win32_BIOS -erroraction Stop
}
Catch
{
Get-WmiObject -ComputerName localhost -class Win32_BIOS
}
Christopher
quelle
Erlaubt PS mir, eine bestimmte Ausnahme für den Fehler zu erfassen, den ich erhalte?
Kyle Brandt
Wenn Sie die .NET-Ausnahmeklasse kennen, können Sie dies folgendermaßen tun ... catch [System.Net.SomeWMIExceptionClass] {Code geht hierher}
Christopher
Ich habe mich geirrt. Gemäß dieser Frage stackoverflow.com/questions/3097785/… und einigen von mir durchgeführten Tests schließt PowerShell die Ausnahme ab, sodass Sie bestimmte Fehler nicht abfangen können.
Christopher