Функция проверки существует в модуле PowerShell - PullRequest
0 голосов
/ 04 октября 2018

У меня есть следующий скрипт 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

Ответы [ 2 ]

0 голосов
/ 04 октября 2018

Get-Command могу сказать вам это.Вы даже можете использовать область видимости модуля, чтобы убедиться, что он исходит от определенного модуля

get-command activedirectory\get-aduser -erroraction silentlycontinue

Например.Оцените это в утверждении if, и вы должны быть готовы.

0 голосов
/ 04 октября 2018

Используйте Get-Command, чтобы проверить, существует ли функция в настоящее время

if (Get-Command 'FunctionDefinedInModule' -errorAction SilentlyContinue) {
    "FunctionDefinedInModule exists"
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...