在 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 自动变量。
我正在尝试编写一个打印出所有参数的 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 自动变量。