提问人:JamesThomasMoon 提问时间:9/20/2023 更新时间:11/13/2023 访问量:23
script Param 允许可选参数和 ValueFromRemainingArguments
script Param allows optional argument and ValueFromRemainingArguments
问:
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
答:
0赞
Santiago Squarzon
9/20/2023
#1
这将完成您的要求,对于最后一次调用,我建议改为使用该参数,否则,您必须验证它在运行时是否为 null,如函数正文中所示。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
0赞
Jan
11/13/2023
#2
PositionalBinding 是可用于实现目标的另一种替代方法:
[CmdletBinding(PositionalBinding=$False)]
param(
[Parameter(Mandatory=$false)][int] $argInt,
[Parameter(ValueFromRemainingArguments=$true)][String[]]$argsRemaining
)
如果您希望某些参数保持位置 - 可以显式指定 - 例如:
[CmdletBinding(PositionalBinding=$False)]
param(
[Parameter(Mandatory=$true, Position=0)][string] $operationName,
[Parameter(Mandatory=$false)][int] $argInt,
[Parameter(ValueFromRemainingArguments=$true)][String[]]$argsRemaining
)
评论