Tes untuk Localhost di Powershell?

8

Aku punya script PowerShell bahwa panggilan Get-WmiObjectdengan -Credential. Namun, ini kesalahan jika saya menjalankannya terhadap mesin lokal:

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

Apa cara yang tepat untuk menambahkan logika localhost untuk menghindari kesalahan ini? Atau ada cara yang lebih baik?

Kyle Brandt
sumber
Bagaimana Anda menyampaikan dalam parameter nama pengguna?
Christopher
@Christopher: By IP (10.xxx), tidak memiliki banyak kendali atas aplikasi yang menjalankannya.
Kyle Brandt

Jawaban:

3

Anda selalu dapat menanyakan IP lokal melalui WMI dan menyimpannya dalam $ localIP dan kemudian mencocokkannya dengan alamat apa pun yang saat ini ada di pipeline atau array Anda:

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

Jika Anda membungkusnya dalam blok coba tangkap dengan berhenti erroraction pada perintah pertama, itu akan menjebak kesalahan dan menjalankan blok tangkap tanpa kredensial.

Try
{
Get-WmiObject -Credential domain\user -ComputerName localhost -class Win32_BIOS -erroraction Stop
}
Catch
{
Get-WmiObject -ComputerName localhost -class Win32_BIOS
}
Christopher
sumber
Apakah PS memungkinkan saya menangkap Pengecualian tertentu untuk kesalahan yang saya dapatkan?
Kyle Brandt
Jika Anda tahu kelas .NET Exception, Anda dapat melakukannya seperti ini ... catch [System.Net.SomeWMIExceptionClass] {code di sini}
Christopher
Saya salah. Per pertanyaan ini stackoverflow.com/questions/3097785/… dan beberapa pengujian yang saya lakukan, PowerShell membungkus pengecualian sehingga Anda tidak dapat menemukan kesalahan tertentu.
Christopher