Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/powershell/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
PowerShell-如何计算参数的数量_Powershell_Scripting_Arguments - Fatal编程技术网

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是一

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

/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的答案。