Блок сценария, который выполняется с помощью 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