为何Get-CimInstance在PowerShell管道中执行会报错?
为什么直接管道到
Get-CimInstance -Query $_会失败? 要搞懂这个问题,得先明确PowerShell里$_变量的生效规则和管道参数绑定的逻辑:
$_作为自动变量,只有在脚本块(比如ForEach-Object { ... }的大括号内部)或者支持延迟绑定的参数上下文里,才会被自动赋值为当前管道对象。- 当你直接写
"SELECT * FROM Win32_Service WHERE name = 'w32time'" | Get-CimInstance -Query $_时,-Query参数并不支持延迟绑定,PowerShell不会把管道传来的字符串自动赋值给$_,此时$_在这个位置是未定义的空值,自然会触发"参数绑定为null"的错误。
而用ForEach-Object包裹后,脚本块会针对管道中的每个对象执行一次,此时$_会被正确设置为前面传来的查询字符串,再把它传给Get-CimInstance -Query参数,就能正常工作了。
内容的提问来源于stack exchange,提问作者JudgedPluto
相关产品推荐
相关产品推荐

