如何在 PowerShell 中强制使用参数?

如何在 PowerShell 中强制使用参数?

88359 次浏览

在每个参数上面的属性中指定它,如下所示:

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(...)块有点难看。 看起来像这个代码:

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是一个开关参数。

(免责声明: 我是相当新的 PS,有可能这个解决方案有一些角落情况下,我不知道。如果有,请告诉我!)

您不必指定 Mandatory=trueMandatory就足够了。

简单的例子:

function New-File
{
param(
[Parameter(Mandatory)][string]$FileName
)


New-Item -ItemType File ".\$FileName"
}