Использование [ValidateScript] в Param приводит к ошибке об уже объявленном параметре - PullRequest
3 голосов
/ 01 марта 2012

У меня есть следующий блок Param в начале моего скрипта:

Param
(
    [Parameter(Mandatory = $true)]
    [ValidateScript({Test-Path $_ -PathType Leaf})]
    [string]$Config,

    [switch]$OverThresholdOnly,
    [switch]$SendEmail,
    [switch]$Debug
)

Когда я запускаю скрипт, я получаю сообщение об ошибке:

"A parameter with the name 'Debug' was defined multiple times for this command. At line:1 char:1"

Line:1 and char:1 is the start of the Param block.

Если я изменю $ Debug на $ Verbose, я получу ту же ошибку с Verbose Я попытался поместить $ debug в верхнюю часть блока Param с той же ошибкой.

Если я удаляю раздел [ValidateScript], он работает нормально.

Кто-нибудь может сказать мне, почему он это делает? Почему [ValidateScript] использует $ Debug и как избежать такого переименования переменной?

1 Ответ

4 голосов
/ 01 марта 2012

PowerShell имеет вездесущие параметры, которые существуют для каждого командлета.

Проверьте get-help about_common_parameters или нажмите здесь .

-Debug и -Verbose являются двумя общими параметрами. Выберите другое имя, чтобы избежать конфликта имен.

Когда вы добавляете атрибут параметра, он изменяет способ, которым PowerShell обрабатывает параметры. На этом этапе он становится расширенной функцией a.k.a командлета сценария. Командлеты сценариев автоматически получают общие параметры.

Проверьте get-help about_Functions_Advanced или нажмите здесь

И get-help about_Functions_Advanced_Parameters или нажмите здесь

...