2012-02-29 2 views
3

я следующий Param блок в начале моего сценария:Используя [ValidateScript] в результатах 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 и как обойти это без переименования переменной?

ответ

4

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

Отъезд get-help about_common_parameters или нажмите here.

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

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

Заканчивать get-help about_Functions_Advanced или нажмите here

И get-help about_Functions_Advanced_Parameters или нажмите here

+0

Я использовал параметры, потому что они были обычным явлением. Придерживайтесь общего набора, чтобы облегчить жизнь. Я также проверял, что они не были зарезервированы. Несмотря на то, что параметр $ Debug не проверяется [ValidateScript], он по-прежнему не позволяет мне использовать параметр Debug в моем собственном скрипте? – Paul

+2

@Pauby Вы видели то, что я написал? Когда вы добавляете атрибут параметра '[Parameter (Обязательный = $ true)], PowerShell автоматически добавляет общие параметры, поэтому вы получаете столкновение имен. –