脚本参数允许可选参数和ValueFromRemainingArguments

问题描述 投票:0回答:1

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
声明应该是什么样子?

powershell parameters parameter-passing
1个回答
0
投票

这将完成你所要求的,对于最后一次调用,我建议使用该参数

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
© www.soinside.com 2019 - 2024. All rights reserved.