2017-02-28 11 views
1

腳本開始了聲明一個參數:PowerShell的自定義PARAM提示

param([Parameter(Position=0, Mandatory = $true)]$a) 

當我沒有傳遞任何參數運行該腳本,我得到:

Cmdlet test.ps1 at command pipeline position 2 
Supply values for the following parameters: 
a: 

我想壓制的第一行「Cmdlet test.ps1 ...」對用戶來說聽起來很尷尬。然後我想爲$ a參數指定一個文本請求,而不是隻顯示它的變量名。

回答

2

你不能那樣做。你能做的最好的就是添加HelpMessage

[Parameter(Position=0, Mandatory = $true, HelpMessage = 'Pretty message')] 

然後你會看到一個額外的線,上面寫着(Type !? for Help.)

提示將是相同的,但如果用戶類型!?然後你的信息會顯示。這不是很好。

除此之外,可以使參數可選(刪除強制的),然後測試值,並在體內進行提示自己:

param([Parameter(Position=0)]$a) 
if (!$a) { 
    $a = Read-Host -Prompt 'Hello user, give me the value, you know the one' 
} 
+1

另一種可能性是,退出參數可選的,但將它指定爲'param([Parameter(Position = 0)] $ a = Read-Host -Prompt'Gimme!'';這將使用命令行提供的任何參數(如果有的話),但如果沒有,因爲它沒有指定輸入不能等價於'$ null'的方式,所以'Read-Host'可能不是最好的方式。 –

+0

@JeffZeitlin是啊你如果你添加了[ValidateNotNullOrEmpty()](或者任何其他的va lidation屬性的參數)它應該適用於你或我的方法(它堅持與變量)。 – briantist