如何在PowerShell中设置强制参数?

xoefb8l8  于 2023-04-30  发布在  Shell
关注(0)|答案(4)|浏览(159)

如何在PowerShell中设置强制参数?

rxztt3cl

rxztt3cl1#

您可以在每个参数上方的属性中指定它,如下所示:

function Do-Something{
    [CmdletBinding()]
    param(
        [Parameter(Position=0,mandatory=$true)]
        [string] $aMandatoryParam,
        [Parameter(Position=1,mandatory=$true)]
        [string] $anotherMandatoryParam)

    process{
       ...
    }
}
rhfm7lfc

rhfm7lfc2#

要使参数成为强制参数,请在参数说明中添加“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?
guicsvcw

guicsvcw3#

只是想发布另一个解决方案,因为我发现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是开关参数。

0lvr5msh

0lvr5msh4#

你不需要指定Mandatory=trueMandatory就足够了。
简单示例:

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

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

相关问题