在PowerShell中如何检测模块是否存在



ModulePowerShell中显得尤为不可缺少,Module的存在也丰富了PowerShell对脚本开发的应用能力,尤其在PowerShell 2.0开始引入Module后。

 

在我们日常编写脚本的时候通常都会遇到开发的脚本中调用了高级PowerShell版本中自带的Module,而到了另一个不支持该Module的环境,会运行错误。所以通常我们会为了应对不同的环境编写不同的代码,而在这之前我们先要做的就是判断当前运行环境中是否存在该模块,如不存在可以换一种方式去解决。

 

既然谈到模块,大家一定不会对Get-Module陌生,通常我们都会使用下面的方法去判断该模块是否存在:

If(Get-Module -Name Azure)
{
    Write-Host "The module exists."
}
Else
{
    Write-Host "The module does not exist."
}


在我当前的环境中明明是存在该模块的,可为什么结果确显示模块不存在呢?

The module does not exist.

因为在PowerShell 3.0中,引入了模块自动导入机制,我们无须像以往在2.0中那样,在使用某个模块的cmdlet时,预先导入该cmdlet的附属Module。所以如果我们依然用以上这个老办法是无法精确判断是否存在该模块的。


我们可以使用Get-Module的另一个参数-ListAvailable来列出是否含有潜在的模块。

If(Get-Module -ListAvailable Azure)
{
    Write-Host "The module exists."
}
Else
{
    Write-Host "The module does not exist."
}

The module exists.

这次我们得到了正确的结果。

这样我们就可以根据是否存在该模块来判断是否需要去编写调用该某块的代码,或者以低版本的方式去编写脚本。



你可能感兴趣的:(Check,Module,PowerShell,Tip,PowerShell)