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

时间:2011-08-23 11:39:26

标签: powershell

如何在PowerShell中强制创建参数?

4 个答案:

答案 0 :(得分:38)

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

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

    process{
       ...
    }
}

答案 1 :(得分:15)

要强制参数,请添加"强制= $ true"到参数说明。要使参数可选,只需离开"强制性"声明。

此代码适用于脚本和函数参数:

[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?

答案 2 :(得分:1)

我只是想发布另一种解决方案,因为我发现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的新手,这种解决方案可能有一些我不知道的极端情况。如果是这样,请告诉我!)

答案 3 :(得分:1)

这是一个使用Mandatory参数的函数的示例。

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

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