PowerShell管道顶层中$_自动变量绑定目标的技术咨询
关于PowerShell中
$_变量的绑定范围问题 $_(别名$PSItem)是PowerShell的自动变量,但它仅在特定脚本块上下文中才会绑定到管道当前对象,比如:
ForEach-Object/Where-Object的脚本块Select-Object -Property中的计算属性脚本块- 事件处理脚本块
- 自定义脚本块作为参数传递的场景
你遇到的问题核心在于:管道顶层的参数位置不属于上述脚本块上下文。比如这段代码:
"common" | Get-Verb -Group $_
这里的$_直接写在Get-Verb的参数位置,没有被任何脚本块包裹,PowerShell会把它当作普通变量处理——如果当前会话未手动定义过$_,它的值就是$null,所以命令无法按预期运行。
正确写法
要将管道前一阶段的对象传递给命令参数,需要把命令放到ForEach-Object的脚本块里,让$_处于有效的绑定上下文:
"common" | ForEach-Object { Get-Verb -Group $_ }
补充说明
$_的绑定是PowerShell的上下文自动注入行为:只有当PowerShell执行到需要处理管道对象的脚本块时,才会将当前管道对象临时赋值给$_;脚本块执行完毕后,$_会恢复到之前的值(如果有的话)。而顶层命令的参数解析阶段,PowerShell还未进入管道对象的处理上下文,所以$_在这里没有特殊含义。
内容的提问来源于stack exchange,提问作者Dess
相关产品推荐
相关产品推荐

