繁体   English   中英

powershell传递命令行参数

[英]powershell pass command line arguments

这是我的代码:

$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

我错过了什么?

谢谢

你实际上有两个范围。 脚本级别和脚本块级别。 $args.Length$args[0]将具有您在Invoke-Command级别所期望的内容。 在脚本块中,还有另一个$args范围。 要从命令行获取args一直到脚本块,您需要从Invoke-Command -ArgumentList $args重新传递它们。

您需要将参数传递给scriptblock:

Invoke-Command  -ScriptBlock $script -ArgumentList $args 

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

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

这允许您将命名参数传递给脚本,如下例所示:

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

如果你省略了-nameOfSomething "Slayer Roolz!" ,然后$nameOfSomething将默认为"some default sting" 同样, $someBoolSwitch默认为$false除非另有定义。

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM