为什么第一个示例不等同于第二个示例?
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