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

1:

$volumeNum = 2
Invoke-Command -ComputerName $IP -Credential $GuestVM -ScriptBlock {"select volume $volumeNum" | diskpart}

2:
Invoke-Command -ComputerName $IP -Credential $GuestVM -ScriptBlock {"select volume 2" | diskpart}

为什么Powershell无法评估





最佳答案

通过Invoke-Command执行的脚本块无法访问当前环境状态,而是在单独的进程中运行。如果您在本地计算机上运行该命令,它将可以正常工作。

问题在于,直到在远程计算机上执行为止,字符串"select volume $volumeNum"才会被评估。因此,它正在远程计算机上的当前进程环境中寻找值,并且在那里未定义$volumeNum

PowerShell提供了一种通过Invoke-Command传递参数的机制。这可以从我的本地机器运行到远程机器:

Invoke-Command -ComputerName $ip -ScriptBlock { param($x) "hello $x" } -ArgumentList "world"

我相信类似的方法将为您工作:
Invoke-Command -ComputerName $IP -Credential $GuestVM -ScriptBlock {param($volumeNum) "select volume $volumeNum" | diskpart} -ArgumentList $volumeNum

09-10 09:09