编写一个.ps1 powershell脚本,我想知道如何找到用户传递了多少个参数。例如,我需要我的程序来处理检查多个文件中的字符串。因此,用户应该能够在Powershell如何计算参数的数量
./Script "a" ex1.txt
或
./Script "a" ex1.txt ex2.txt
我知道在bash我们可以使用$#
键入但我怎么在PowerShell中进行检查。谢谢
编写一个.ps1 powershell脚本,我想知道如何找到用户传递了多少个参数。例如,我需要我的程序来处理检查多个文件中的字符串。因此,用户应该能够在Powershell如何计算参数的数量
./Script "a" ex1.txt
或
./Script "a" ex1.txt ex2.txt
我知道在bash我们可以使用$#
键入但我怎么在PowerShell中进行检查。谢谢
在脚本或函数中,您可以通过自动填充的变量$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
您使用内置$Args
和它的属性Count
。
$Args.Count
这会给你多少个用户传递给脚本的参数。
Read through a few help files如果你有时间;他们通常非常有帮助!从帮助
get-help *
get-help *parameters*
get-help about_Parameters
get-help about_Automatic_Variables
get-help about_Functions*
#etc...
笔记应该可以帮助您:
的$ args
包含传递给函数,脚本未申报的参数和/或参数 值的数组,或脚本块。 创建函数时,可以通过使用 param关键字或在函数名称后面添加 圆括号中逗号分隔的参数列表来声明参数。
在事件操作中,$ Args变量包含的对象代表正在处理的事件的事件参数 。仅在事件注册 命令的操作块中填充此变量 。此变量的值也可以在Get-Event返回的PSEventArgs对象(System.Management.Automation.PSEventArgs) 的SourceArgs 属性中找到。
$ PSBoundParameters
包含传递给脚本 或功能及其当前值的参数的字典。在声明参数的作用域中,此变量的值仅为 ,例如脚本或函数。 您可以使用它来显示或更改参数 的当前值或将参数值传递给另一个脚本或函数。
如果你最终使用两个参数绑定和非绑定的参数,你可以稍微将二者结合起来(example)
题外话:
我强烈建议不要使用的$ args。你应该总是使用绑定参数,当你被迫不使用绑定参数的情况很少。
为什么?所有带参数的函数都应遵循最佳实践,并使用param()块作为参数。如果您阅读帮助文件中的参数,您会发现使用param块可以为您提供各种有用的功能,如验证,强制强制参数,接受管道输入等。在让PowerShell执行均匀更多的工作与你[cmdletbinding()]
干杯!
假设您的脚本被一个或多个开关参数调用,$ args.Count为0.使用$ PSBoundParameters作品,请参阅Cookie Monster的答案。 –