PowerShell - 如何计算参数的数量

use*_*803 13 powershell scripting arguments

我正在写一个.ps1 PowerShell脚本,我想知道如何找到用户传递的参数数量.例如,我需要我的程序来处理多个文件中的字符串检查.所以用户应该能够输入

./Script "a" ex1.txt 要么

./Script "a" ex1.txt ex2.txt

我知道在Bash中我们可以使用$#,但是我如何检查PowerShell?

Pet*_*ter 13

在脚本或函数中,您可以通过自动填充的$args变量访问传入的参数.这$args是一个数组,因此您可以找到通过其Count属性传递的参数数量.

一个例子:

function PrintArgs()
{
    Write-Host "You passed $($args.Count) arguments:"
    $args | Write-Host
}
Run Code Online (Sandbox Code Playgroud)

致电PrintArgs:

> PrintArgs 'a' 'b' 'c'
You passed 3 arguments:
a
b
c
Run Code Online (Sandbox Code Playgroud)

  • 假设您的脚本使用一个或多个开关参数调用,$ args.Count为0.使用$ PSBoundParameters工作,请参阅Cookie Monster的答案. (4认同)

Coo*_*ter 9

如果你有时间,请阅读一些帮助文件 ; 他们通常非常有帮助!

get-help *
get-help *parameters*
get-help about_Parameters
get-help about_Automatic_Variables
get-help about_Functions*
#etc...
Run Code Online (Sandbox Code Playgroud)

来自帮助的备注可以帮助您:

的$ args

包含传递给函数,脚本或脚本块的未声明参数和/或参数值的数组.创建函数时,可以使用param关键字声明参数,也可以在函数名后面的括号中添加以逗号分隔的参数列表.

在事件操作中,$ Args变量包含表示正在处理的事件的事件参数的对象.此变量仅在事件注册命令的Action块中填充.此变量的值也可以在Get-Event返回的PSEventArgs对象(System.Management.Automation.PSEventArgs)的SourceArgs属性中找到.

$ PSBoundParameters

包含传递给脚本或函数的参数字典及其当前值.此变量仅在声明参数的作用域中具有值,例如脚本或函数.您可以使用它来显示或更改参数的当前值,或将参数值传递给另一个脚本或函数.

如果最终使用绑定参数和未绑定参数,则可以将两者结合使用(示例)

稍微离题:

我强烈建议不要使用$ args.您应该始终使用绑定参数,在您被迫不使用它们的情况下很少.

为什么?所有带参数的函数都应遵循最佳实践,并使用param()块作为参数.如果您阅读了帮助文件中的参数,您会发现使用param块为您提供了各种有用的功能,如验证,强制强制参数,接受管道输入等.在让PowerShell执行操作之前,还需要它.使用[ cmdletbinding()] 为您完成更多工作

干杯!


The*_*ian 6

您使用内置$Args和属性Count.

$Args.Count
Run Code Online (Sandbox Code Playgroud)

这将为您提供用户传递给脚本的参数数量.