为何声明$process='SVCHOST'成功,但在Invoke-Command中无法正常工作?
问题原因与解决方法
问题出在远程脚本块无法直接访问本地变量:你声明的$process是本地变量,而Invoke-Command的脚本块是在远程机器的PowerShell会话中执行的,默认无法识别本地上下文里的变量。
下面是两种可行的解决方式:
方式1:使用$using:前缀(PowerShell 3.0+推荐)
通过$using:前缀告诉PowerShell,要引用的是本地会话中的变量:
$process='SVCHOST' Invoke-Command -ComputerName 你的目标机器名 -ScriptBlock { Get-Process -Name $using:process }
方式2:通过-ArgumentList传递参数(兼容低版本)
把本地变量作为参数传递给远程脚本块,有两种写法:
写法A:直接用$args接收
$process='SVCHOST' Invoke-Command -ComputerName 你的目标机器名 -ScriptBlock { Get-Process -Name $args[0] } -ArgumentList $process
写法B:显式定义参数(可读性更高)
$process='SVCHOST' Invoke-Command -ComputerName 你的目标机器名 -ScriptBlock { param($targetProcess) Get-Process -Name $targetProcess } -ArgumentList $process
内容的提问来源于stack exchange,提问作者Phong Nguyen
相关产品推荐
相关产品推荐

