![](/img/trans.png)
[英]How to pass command line arguments to a PowerShell script invoked by a doskey
[英]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.