tl;dr PowerShell 脚本
Param
部分允许可选参数后跟 ValueFromRemainingArguments
参数?
我想要一个脚本,在传递
int
时采用可选参数值 -argInt
并且所有其他参数都会附加到数组 String[]
中。 argInt
默认为 0
。
因此给定文件
my-args.ps1
以及脚本主体
Write-Host "argInt is $argInt"
foreach($arg in $argsRemaining) {
Write-Host "arg is $arg"
}
通话看起来像
PS> .\my-args.ps1 foo bar
argInt is 0
arg is foo
arg is bar
PS> .\my-args.ps1 -argInt 33 foo bar
argInt is 33
arg is foo
arg is bar
PS> .\my-args.ps1 -argInt foo
my-args.ps1: Cannot process argument transformation on parameter 'argInt'. Cannot convert value "foo" to type "System.Int32".
PS> .\my-args.ps1
my-args.ps1: Cannot validate argument on parameter 'argsRemaining'. The argument is null, empty, or an element of the argument collection contains a null value.
Param
声明应该是什么样子?
这将完成你所要求的,对于最后一次调用,我建议使用该参数
Mandatory
,否则,你必须验证它在运行时不为空,如函数主体所示。
function Test-Param {
param(
[ValidateNotNullOrEmpty()]
[Parameter()]
[int] $argInt = 0,
[ValidateNotNullOrEmpty()]
[Parameter(ValueFromRemainingArguments, Position = 0)]
[string[]] $argsRemaining
)
if (-not $argsRemaining) {
$PSCmdlet.ThrowTerminatingError(
[System.Management.Automation.ErrorRecord]::new(
# Can add a custom message as 2nd Argument here:
[System.ArgumentNullException]::new('argsRemaining'),
'NullRemainingArgument',
[System.Management.Automation.ErrorCategory]::InvalidArgument,
$argsRemaining))
}
Write-Host "argInt is $argInt"
foreach ($arg in $argsRemaining) {
Write-Host "arg is $arg"
}
}
Test-Param foo bar
Test-Param -ArgInt 33 foo bar
Test-Param -ArgInt foo
Test-Param