您好我是PowerShell的新手,我正在编写一个接受多个参数的脚本。这些参数在文件内的for循环中被访问。 它看起来像这样
$numOfArgs = args.Length
for ($i=3; $i -le $numOfArgs; $i++)
{
write-host "folder: $args[$i]"
# does something with the arguments
}
但是,输出作为一个整体给出了所有参数,而不仅仅是数组中指定的一个参数作为数组元素?谁能告诉我这里的错误在哪里?谢谢!
答案 0 :(得分:2)
编辑:感谢Duncan指出这一点,错过了一个变量中的$。
试试这个:
$numOfArgs = $args.Length
for ($i=3; $i -le $numOfArgs; $i++)
{
write-host "folder: $($args[$i])"
# does something with the arguments
}
将变量放在字符串中时,将评估变量,而不是整个表达式。因此,用$()
围绕它,Powershell将评估整个表达式。
换句话说,仅评估$args
而不是$args[$i]
答案 1 :(得分:1)
首选的Powershell方法是使用诸如此类的bind参数;
param(
[Parameter(Mandatory=$true)][string[]]$Paths
)
# not sure why we're skipping some elements
$Paths | foreach-object { write-host "folder: $_" }
您可以像这样指定一个数组或参数;
.\myScript.ps1 -Paths c:\,c:\Users\,'c:\Program Files\'
通过这种方式,它可以与-argument TAB完成一起使用,甚至可以使用get-help cmdlet简要介绍您的用法。
get-help .\myscript.ps1
myScript.ps1 [-Paths] <string[]> [<CommonParameters>]