如何在 PowerShell 中强制使用参数?
在每个参数上面的属性中指定它,如下所示:
function Do-Something{ [CmdletBinding()] param( [Parameter(Position=0,mandatory=$true)] [string] $aMandatoryParam, [Parameter(Position=1,mandatory=$true)] [string] $anotherMandatoryParam) process{ ... } }
要使参数具有强制性,请在参数描述中添加“ Mandatory = $true”。要使参数成为可选参数,只需省略“ Mandatory”语句即可。
这段代码同时适用于脚本和函数参数:
[CmdletBinding()] param( [Parameter(Mandatory=$true)] [String]$aMandatoryParameter, [String]$nonMandatoryParameter, [Parameter(Mandatory=$true)] [String]$anotherMandatoryParameter )
确保“ param”语句是脚本或函数中的第一个语句(注释和空行除外)。
您可以使用“ Get-Help”cmdlet 来验证参数的定义是否正确:
PS C:\> get-help Script.ps1 -full [...] PARAMETERS -aMandatoryParameter <String> Required? true Position? 1 Default value Accept pipeline input? false Accept wildcard characters? -NonMandatoryParameter <String> Required? false Position? 2 Default value Accept pipeline input? false Accept wildcard characters? -anotherMandatoryParameter <String> Required? true Position? 3 Default value Accept pipeline input? false Accept wildcard characters?
只是想发布另一个解决方案,因为我发现 param(...)块有点难看。 看起来像这个代码:
param(...)
function do-something { param( [parameter(position=0,mandatory=$true)] [string] $first, [parameter(position=1,mandatory=$true)] [string] $second ) ... }
也可以这样写得更简洁:
function do-something ( [parameter(mandatory)] [string] $first, [parameter(mandatory)] [string] $second ) { ... }
这看起来好多了! =$true可以省略,因为 mandatory是一个开关参数。
=$true
mandatory
(免责声明: 我是相当新的 PS,有可能这个解决方案有一些角落情况下,我不知道。如果有,请告诉我!)
您不必指定 Mandatory=true,Mandatory就足够了。
Mandatory=true
Mandatory
简单的例子:
function New-File { param( [Parameter(Mandatory)][string]$FileName ) New-Item -ItemType File ".\$FileName" }