PowerShell-如何计算参数的数量
我正在编写一个.ps1 PowerShell脚本,我想知道如何找到用户传递的参数。例如,我需要我的程序来处理检查多个文件中的字符串。因此,用户应该能够输入PowerShell-如何计算参数的数量,powershell,scripting,arguments,Powershell,Scripting,Arguments,我正在编写一个.ps1 PowerShell脚本,我想知道如何找到用户传递的参数。例如,我需要我的程序来处理检查多个文件中的字符串。因此,用户应该能够输入 /Script“a”ex1.txt或 /Script“a”ex1.txt ex2.txt 我知道在Bash中我们可以使用$#,但是如何签入PowerShell?您可以使用内置的$Args和属性Count $Args.Count 这将给出用户传递给脚本的参数数量。在脚本或函数中,您可以通过自动填充的$args变量访问传入的参数。$args是一
/Script“a”ex1.txt
或
/Script“a”ex1.txt ex2.txt
我知道在Bash中我们可以使用
$#
,但是如何签入PowerShell?您可以使用内置的$Args
和属性Count
$Args.Count
这将给出用户传递给脚本的参数数量。在脚本或函数中,您可以通过自动填充的
$args
变量访问传入的参数。$args
是一个数组,因此您可以找到通过其Count
属性传递的参数数
例如:
function PrintArgs()
{
Write-Host "You passed $($args.Count) arguments:"
$args | Write-Host
}
调用PrintArgs
:
> PrintArgs 'a' 'b' 'c'
You passed 3 arguments:
a
b
c
如果你有时间;他们通常都很有帮助
get-help *
get-help *parameters*
get-help about_Parameters
get-help about_Automatic_Variables
get-help about_Functions*
#etc...
帮助中应该对您有所帮助的注释:
$Args
包含未声明参数和/或参数的数组
传递给函数、脚本或脚本块的值。
创建函数时,可以使用
param关键字或通过在中添加逗号分隔的参数列表
函数名后面的括号
在事件操作中,$Args变量包含表示
正在处理的事件的事件参数。这个变量
仅在事件注册的操作块中填充
指挥部。此变量的值也可以在SourceArgs中找到
PSEventArgs对象的属性(System.Management.Automation.PSEventArgs)
获取事件返回
$PSBoundParameters
包含传递给脚本的参数字典
或函数及其当前值。此变量只有一个值
在声明参数的作用域中,例如脚本或函数。
您可以使用它来显示或更改参数的当前值
或将参数值传递给另一个脚本或函数
如果最终同时使用绑定参数和未绑定参数,则可以将两者结合使用()
有点离题:
我强烈建议不要使用$args。您应该始终使用绑定参数,只有极少数情况下您被迫不使用它们
为什么??所有接受参数的函数都应遵循最佳实践,并对参数使用param()块。如果您仔细阅读帮助文件中的参数,您会发现使用param块可以提供各种有用的功能,如验证、强制使用参数、接受管道输入等。在让PowerShell使用[()]为您做更多工作之前,还需要使用它
干杯 要正确回答OP的问题: 根据脚本的编写方式,获取参数参数计数有两种可能性:
1)使用Powershell的尼斯绑定参数功能:
$PSBoundParameters.Count
2)不使用绑定参数,参数计数在:$Args.count
还要注意的是:使用绑定参数时,$Args参数数组和计数不存在。假设使用一个或多个开关参数调用脚本,$Args.count为0。使用$PSBoundParameters有效,请参见Cookie Monster的答案。