在 PowerShell 中打印所有位置参数

Print all positional arguments in PowerShell

我正在尝试编写一个打印出所有参数的 PowerShell 函数。

ArgChecker.ps1

function Print-Args
{
  [CmdletBinding()]
  param ([string[]]$words)
    Write-Verbose "Count: $($words.Count)"
    Write-Output "Passed arguments:"
    $words
}

我还想从命令提示符调用它。

我是这样做的

powershell -ExecutionPolicy Bypass -command "& { . .\ArgChecker.ps1; Print-Args 'hi' 'Two' -Verbose }"

但它抛出错误 Print-Args : A positional parameter cannot be found that accepts argument 'Two'

有没有什么方法可以编写函数,使其可以接受无限数量的该格式参数?我想我正在寻找类似于 C# 中的 params 关键字的东西。

在常规函数中,您可以使用 $args 自动变量。

function Write-Args {
    $args
}

如果您需要带有 CmdletBinding 的 cmdlet,您可以使用 ValueFromRemainingArguments 选项:

function Write-Args {
    [CmdletBinding()]
    param(
        [Parameter(ValueFromRemainingArguments)]
        [string[]]$Arguments
    )
    $Arguments
}

但是请注意,由于 CmdletBinding-Verbose 不会出现在该列表中,因为它是一个 common parameter. If you want to list those too, you could use the $PSBoundParameters 自动变量。