Jok*_*kru 1 parameters powershell
我正在尝试自行更新脚本,然后重新启动。
当脚本尝试将参数传递给自身时,就会出现问题,显然是使用paramclears $args。我有一个想法,使它$args像这样的自定义处理程序param,但是有更好的方法吗?我确实需要将参数命名,因此必须进行一些处理,我不能只使用$args。
param(
$a = "abc",
$b,
$c
)
Write-Host $a
Write-Host $b
Write-Host $c
Write-Host $args
Run Code Online (Sandbox Code Playgroud)
结果如下:
.\a.ps1 -a 1 -b 2 3
1
2
3
Run Code Online (Sandbox Code Playgroud)
$args向主机写入不会返回任何内容。
以您的问题陈述:
我正在尝试自行更新脚本,然后重新启动。
这是$PSBoundParameters自动变量的目的:
.\myscript.ps1 @PSBoundParameters
Run Code Online (Sandbox Code Playgroud)
还有你的其他问题:
当脚本尝试将参数传递给自身时,显然使用param会清除$ args
这是不正确的。您的示例中的问题是实际使用的位置绑定参数绑定。实际发生的是3绑定$c。 $args除非您具有带有ValueFromRemainingArguments属性的参数,否则它将捕获未绑定的参数。您可以使用CmdletBinding属性停止此绑定:
function Verb-Noun {
[CmdletBinding(PositionalBinding = $false)]
param(
Run Code Online (Sandbox Code Playgroud)
正如@mklement0指出的,你不能用$args在先进的功能,你使用的地方CmdletBinding或Parameter属性,比如我上面的例子。
文件:
about_Automatic_Variables#args
about_Functions_CmdletBindingAttribute
about_Functions_Advanced_Parameters