使用参数但在Powershell中保存$ args

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向主机写入不会返回任何内容。

The*_*le1 5

以您的问题陈述:

我正在尝试自行更新脚本,然后重新启动。

这是$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先进的功能,你使用的地方CmdletBindingParameter属性,比如我上面的例子。


文件:

about_Automatic_Variables#args

about_Functions_CmdletBindingAttribute

about_Functions_Advanced_Parameters