Как проверить, если оснастка PowerShell уже загружен перед вызовом Add-PSSnapin



У меня есть группа сценариев PowerShell, которые иногда запускаются вместе, иногда по одному. Каждый из сценариев требует загрузки определенной оснастки.



прямо сейчас каждый скрипт вызывает Add-PSSnapin XYZ в начале.



теперь, если я запускаю несколько сценариев спина к спине последующие сценарии бросают:




не удается добавить оснастку Windows PowerShell XYZ, поскольку она добавлена alerady. Проверьте имя оснастки и попробуйте снова.




Как я могу проверить каждый скрипт, чтобы убедиться, что оснастка уже загружена перед вызовом Add-PSSnapin?

524   5  

5 ответов:

вы должны быть в состоянии сделать это с чем-то вроде этого, где вы запрашиваете Snapin, но говорите PowerShell не ошибаться, если он не может найти его:

if ( (Get-PSSnapin -Name MySnapin -ErrorAction SilentlyContinue) -eq $null )
{
    Add-PsSnapin MySnapin
}

Скотт, уже дал вам ответ. Вы также можете загрузить его в любом случае и игнорировать ошибку, если она уже загружена:

Add-PSSnapin -Name <snapin> -ErrorAction SilentlyContinue

Удивительно, но никто не упомянул родной способ для скриптов указывать зависимости:#REQUIRES -PSSnapin Microsoft.PowerShell... комментарий директива препроцессора. Точно так же вы можете потребовать повышения с -RunAsAdministrator, модули -Modules Module1,Module2, и определенная версия Runspace.

подробнее, введя Get-Help about_requires

я попробовал пример кода @ScottSaad, но это не сработало для меня. Я не выяснил точно, почему, но проверка была ненадежной, иногда успешной, а иногда и нет. Я обнаружил, что с помощью Where-Object фильтрация на Name свойства лучше работал:

if ((Get-PSSnapin | ? { $_.Name -eq $SnapinName }) -eq $null) {
    Add-PSSnapin $SnapinName 
}

вежливость код этой.

Скотт Саадс работает, но это кажется мне несколько быстрее. Я не измерял его, но он, кажется, загружается немного быстрее, так как он никогда не производит errormessage.

$snapinAdded = Get-PSSnapin | Select-String $snapinName
if (!$snapinAdded)
{
    Add-PSSnapin $snapinName
}

Comments

    Ничего не найдено.