PowerShell如何传递命令行参数

7

这是我的代码:

$script={
 Write-Host "Num Args:" $args.Length;
  Write-Host $args[0]   
}

Invoke-Command  -ScriptBlock $script

当我运行时,
  powershell.exe .\test.ps1 one two three

我得到了

Num Args: 0

我想我会得到
注:这句话需要上下文才能做出更准确的翻译。
Num Args: 3
One

有什么我漏掉的吗?

谢谢

3个回答

8

实际上你有两个作用域,脚本级别和脚本块级别。 $args.Length$args[0] 将在 Invoke-Command 级别上拥有你期望的内容。在脚本块内部,还有一个作用域是用于 $args 的。为了将命令行中的参数传递到脚本块中,你需要从 Invoke-Command -ArgumentList $args 重新传递它们。


5

您需要将参数传递给脚本块:

Invoke-Command  -ScriptBlock $script -ArgumentList $args 

0

您还可以显式声明命名参数。例如:

param([switch]$someBoolSwitch=$false, [String]$nameOfSomething="some default string")

这样,您就可以向脚本传递命名参数,例如以下示例:

.\<nameOfScript.ps1> -someBoolSwitch -nameOfSomething "Slayer Roolz!"

如果省略了-nameOfSomething "Slayer Roolz!",那么$nameOfSomething将简单地默认为"some default sting"。同样,除非另有定义,否则$someBoolSwitch默认为$false

此方法的好处在于允许您作为开发人员决定哪些参数是必需的,哪些参数可以省略或默认。此外,它允许用户以任何顺序输入参数,因为它们是命名而不是位置性的。

与位置参数相比,具有命名参数的一个缺点是命令行调用可能会变得非常大,因为用户必须键入每个参数名称。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接