2012-02-29 34 views
3

我已經在我的劇本的開頭以下帕拉姆塊:使用[ValidateScript]在參數結果在誤差大約已經聲明參數

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相同的錯誤。我已經嘗試將$ debug放在Param塊的頂部,並帶有相同的錯誤。

如果我刪除[ValidateScript]部分,它工作正常。

有人可以告訴我爲什麼這樣做嗎?爲什麼[ValidateScript]使用$ Debug以及如何避免重命名變量?

回答

4

PowerShell具有無處不在的參數,它存在於每個cmdlet中。

結賬get-help about_common_parameters或點擊here

-Debug-Verbose是兩個常見參數。選擇一個不同的名稱以避免命名衝突。

當您添加參數屬性時,它將更改PowerShell處理參數的方式。在這一點a.k.a腳本cmdlet中它變成了一個高級功能。腳本cmdlet自動接收通用參數。

退房get-help about_Functions_Advanced或單擊here

而且get-help about_Functions_Advanced_Parameters或單擊here

+0

我所用的參數,因爲他們是共同的。堅持一個共同的設置,讓生活更輕鬆。我也檢查他們沒有保留。 即使$ Debug參數沒有被[ValidateScript]驗證,它仍然阻止我在我自己的腳本中使用Debug參數? – Paul 2012-03-01 08:47:00

+2

@Pauby你看到我寫了什麼嗎?當您添加參數屬性'[Parameter(Mandatory = $ true)]'PowerShell會自動添加通用參數,這就是您遇到命名衝突的原因。 – 2012-03-01 14:15:19