Jok*_*kru 1 parameters powershell
我正在尝试自行更新脚本,然后重新启动。
当脚本尝试将参数传递给自身时,就会出现问题,显然是使用param
clears $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
归档时间: |
|
查看次数: |
65 次 |
最近记录: |