检查功能存在于PowerShell模块中

时间:2018-10-04 14:23:14

标签: powershell

我有以下PowerShell脚本,该脚本在目录中搜索PowerShell模块)。所有找到的模块将被导入并存储在列表中(使用-PassThru)选项。 脚本对导入的模块进行迭代,并调用模块中定义的函数:

# Discover and import all modules
$modules = New-Object System.Collections.Generic.List[System.Management.Automation.PSModuleInfo]
$moduleFiles = Get-ChildItem -Recurse -Path "$PSScriptRoot\MyModules\" -Filter "Module.psm1"
foreach( $x in $moduleFiles ) {
    $modules.Add( (Import-Module -Name $x.FullName -PassThru) )
}

# All configuration values
$config = @{
    KeyA = "ValueA"
    KeyB = "ValueB"
    KeyC = "ValueC"
}

# Invoke 'FunctionDefinedInModule' of each module
foreach( $module in $modules ) {
    # TODO: Check function 'FunctionDefinedInModule' exists in module '$module '
    & $module FunctionDefinedInModule $config
}

现在,我想先检查一个函数是否在调用之前在模块中定义。 如何进行这种检查?

添加检查是否避免在调用不存在的函数时引发异常的原因:

& : The term ‘FunctionDefinedInModule’ is not recognized as the name of a cmdlet, function, script file, or operable program

4 个答案:

答案 0 :(得分:1)

使用Get-Command检查当前是否存在功能

if (Get-Command 'FunctionDefinedInModule' -errorAction SilentlyContinue) {
    "FunctionDefinedInModule exists"
}

答案 1 :(得分:1)

Get-Command可以告诉您。您甚至可以使用模块作用域来确保它来自特定模块

get-command activedirectory\get-aduser -erroraction silentlycontinue

例如。在if语句中对此进行评估,您应该一切顺利。

答案 2 :(得分:0)

我经常需要它,为此我写了module

Example

答案 3 :(得分:0)

如果需要检查许多功能

try{
    get-command -Name Get-MyFunction -ErrorAction Stop
    get-command -Name Get-MyFunction2 -ErrorAction Stop
}
catch{
    Write-host "Load Functions first prior to laod the current script"
}