在远程计算机上使用Invoke-Command时,字符串扩展在PowerShell中不起作用

Pri*_*moz 5 string variables powershell

为什么第一个例子不等同于第二个?

1:

$volumeNum = 2
Invoke-Command -ComputerName $IP -Credential $GuestVM -ScriptBlock {"select volume $volumeNum" | diskpart}
Run Code Online (Sandbox Code Playgroud)

2:

Invoke-Command -ComputerName $IP -Credential $GuestVM -ScriptBlock {"select volume 2" | diskpart}
Run Code Online (Sandbox Code Playgroud)

为什么不能评估

"select volume $ volumeNum"

选择第2卷

Eri*_*ver 7

通过执行的脚本块Invoke-Command无法访问当前环境状态,它在单独的进程中运行.如果您在本地计算机上运行该命令,它将起作用.

问题是"select volume $volumeNum"在远程计算机上执行字符串之前,不会对字符串进行评估.因此,它正在寻找远程机器上当前进程的环境中的值,并且$volumeNum没有在那里定义.

PowerShell提供了一种通过传递参数的机制Invoke-Command.这可以从我的本地机器到遥控器:

Invoke-Command -ComputerName $ip -ScriptBlock { param($x) "hello $x" } -ArgumentList "world"
Run Code Online (Sandbox Code Playgroud)

我相信类似的方法对你有用:

Invoke-Command -ComputerName $IP -Credential $GuestVM -ScriptBlock {param($volumeNum) "select volume $volumeNum" | diskpart} -ArgumentList $volumeNum
Run Code Online (Sandbox Code Playgroud)