Функция Powershell с Try ... Catch не включается в функцию, потому что параметр вызывает ошибку - PullRequest
0 голосов
/ 12 июня 2019

Я пытаюсь использовать функцию, чтобы подтвердить или опровергнуть, сделали ли мы это без командлета без ошибки - я запускаю несколько командлетов AD / Exchange и сохраняю / выводю результаты в .csvв конце.Я забыл импортировать модуль Exchange, который работал для меня, так как он прекратился так, как я не ожидал, когда использовал Get-DistributionList.

Я пытался использовать $?вместо Try..Catch, принудительно останавливая советник, и сначала сохраняя параметр в переменной, но поскольку модуль не установлен и командлет не распознан, он просто останавливает программу.

Вот по сути то, что я хочу сделать:

function Test-Success ($cmdlet){
    try{
          $cmdlet
          "Y"
    } catch {
          "Err -- Perform manually."
    }
}

Test-Success(Get-DistributionList)

Но я получаю следующую ошибку, и сценарий останавливается:

Get-DistributionList : The term 'Get-DistributionList' is not recognized as the name of a cmdlet, function, script
file, or operable program. Check the spelling of the name, or if a path was included, verify that the path is correct
and try again.
At line:46 char:10
+ Test-Success(Get-DistributionList)
+          ~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : ObjectNotFound: (Get-DistributionList:String) [], CommandNotFoundException
    + FullyQualifiedErrorId : CommandNotFoundException

В худшем случае, я могу просто сделать попытку... ловить каждый раз, как кажется, работает таким образом (пример:)

try {
     Get-DistributionList
     "y"
} catch {
     "Err -- Perform manually"
}

Любая помощь приветствуется! Я надеюсь, что есть обходной путь, чтобы не завершить программуесли командлет не работает таким образом, но я не очень хорошо знаком с PowerShell, и мои собственные поиски были неубедительными.

Ответы [ 2 ]

1 голос
/ 12 июня 2019

Если вы просто смотрите, существует ли команда, вы должны использовать Get-Command, как предложено @DimplesMcGibble.Если вы пытаетесь выполнить команду, вы можете передать имя команды в виде строки и использовать оператор invoke

function Test-Success ($cmdlet){
    try{
          & $cmdlet
          "Y"
    } catch {
          "Err -- Perform manually."
    }
}

Test-Success 'Get-DistributionList'
0 голосов
/ 12 июня 2019

Вы должны иметь возможность использовать Get-Command для проверки существования данного командлета без try\catch

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...