如何在调用Add-PSSnapin之前检查是否已加载PowerShell管理单元

jos*_*hls 90 powershell

我有一组PowerShell脚本有时可以一起运行,有时一次运行.每个脚本都要求加载某个管理单元.

现在每个脚本都Add-PSSnapin XYZ在开头调用.

现在,如果我背靠背地运行多个脚本,则后续脚本会抛出:

无法添加Windows PowerShell管理单元XYZ,因为它已添加了alerady.验证管理单元的名称,然后重试.

在调用Add-PSSnapin之前,如何检查每个脚本以查看是否已加载管理单元?

Sco*_*aad 132

你应该可以用这样的东西来做,你在哪里查询Snapin但是如果找不到它就告诉PowerShell不要输出错误:

if ( (Get-PSSnapin -Name MySnapin -ErrorAction SilentlyContinue) -eq $null )
{
    Add-PsSnapin MySnapin
}
Run Code Online (Sandbox Code Playgroud)

  • SilentlyContinue是因为如果默认情况下找不到捕捉,则Get-PSSnapin不会静默返回null.它出错了. (2认同)

Sha*_*evy 21

斯科特已经给你答案了.您也可以加载它并忽略错误(如果已加载):

Add-PSSnapin -Name <snapin> -ErrorAction SilentlyContinue
Run Code Online (Sandbox Code Playgroud)

  • 如果由于没有安装等其他原因而没有加载,那么这也会默默地继续.这可能导致使用您的脚本的人难以诊断问题. (6认同)