如何在PowerShell中强制创建参数?
答案 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"
}