2014-03-18 127 views
7

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

./Script "a" ex1.txt

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

我知道在bash我们可以使用$#键入但我怎么在PowerShell中进行检查。谢谢

回答

11

在脚本或函数中,您可以通过自动填充的变量$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 
+2

假设您的脚本被一个或多个开关参数调用,$ args.Count为0.使用$ PSBoundParameters作品,请参阅Cookie Monster的答案。 –

4

您使用内置$Args和它的属性Count

$Args.Count 

这会给你多少个用户传递给脚本的参数。

6

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()]

干杯!