Saya memiliki sekelompok skrip PowerShell yang terkadang dijalankan bersamaan, terkadang satu per satu. Setiap skrip mengharuskan snap-in tertentu dimuat.
Saat ini setiap skrip dipanggil Add-PSSnapin XYZ
di awal.
Sekarang jika saya menjalankan beberapa skrip secara berurutan, skrip berikutnya akan membuang:
Tidak dapat menambahkan snap-in Windows PowerShell XYZ karena sudah ditambahkan. Verifikasi nama snap-in dan coba lagi.
Bagaimana saya bisa meminta setiap skrip memeriksa untuk melihat apakah snap-in sudah dimuat sebelum memanggil Add-PSSnapin?
powershell
joshuapoehls
sumber
sumber
Scott sudah memberi Anda jawabannya. Anda juga dapat memuatnya dan mengabaikan kesalahan jika sudah dimuat:
sumber
Anehnya, tidak ada yang menyebutkan cara asli skrip untuk menentukan dependensi:
#REQUIRES -PSSnapin Microsoft.PowerShell...
direktif comment / preprocessor. Hal yang sama Anda mungkin memerlukan elevasi dengan-RunAsAdministrator
, modul dengan-Modules Module1,Module2
, dan versi Runspace tertentu.Baca selengkapnya dengan mengetik
Get-Help about_requires
sumber
Saya mencoba contoh kode @ ScottSaad tetapi tidak berhasil untuk saya. Saya belum tahu persis mengapa tetapi cek itu tidak dapat diandalkan, terkadang berhasil dan terkadang tidak. Saya menemukan bahwa menggunakan
Where-Object
pemfilteran padaName
properti bekerja lebih baik:if ((Get-PSSnapin | ? { $_.Name -eq $SnapinName }) -eq $null) { Add-PSSnapin $SnapinName }
Kode milik ini .
sumber
Scott Saads bekerja tetapi ini tampaknya lebih cepat bagi saya. Saya belum mengukurnya tetapi sepertinya memuat sedikit lebih cepat karena tidak pernah menghasilkan pesan yang salah.
$snapinAdded = Get-PSSnapin | Select-String $snapinName if (!$snapinAdded) { Add-PSSnapin $snapinName }
sumber