Я предполагаю, что переменная $ToolsVersion
не определена в области действия Invoke-Command
, так как область выполнения выполняется на удаленном компьютере.
Попробуйте:
Start-Process "C:\$Using:ToolsVersion.exe" -ArgumentList '/s /v "/qn reboot=r ADDLOCAL=all"' -Wait
.
From about_Remote_Variables :
ИСПОЛЬЗОВАНИЕ ЛОКАЛЬНЫХ ПЕРЕМЕННЫХ
Вы также можете использовать локальные переменные в удаленных командах, но вы должны указать, что переменнаяопределяется в локальном сеансе.
Начиная с Windows PowerShell 3.0, вы можете использовать модификатор области «Использование» для определения локальной переменной в удаленной команде....
ОБНОВЛЕНИЕ 1:
Чтобы получить журналы с пульта, вы должны изменить свой код на:
Invoke-Command -ComputerName $FQDN -ScriptBlock {
$computerName = $env:COMPUTERNAME
Start-Process "C:\$ToolsVersion.exe" -ArgumentList '/s /v "/qn reboot=r ADDLOCAL=all"' -Wait
Start-Process "C:\$ToolsVersion.exe" -ArgumentList '/s /v "/qn reboot=r REMOVE=VSS"' -Wait
Start-Process "C:\$ToolsVersion.exe" -ArgumentList '/s /v "/qn reboot=r ADDLOCAL=VSS"' -Wait
$logging = @()
$logging = "$computerName: Installation completed on $vmName"
taskkill /IM vmtoolsd.exe /F
$logging += "$computerName: VMtools process killed on $vmName"
Start-Service -Name VMTools
$logging += "$computerName: VMware Tools service was started on $vmName"
$logging
} | Do-Log
Здесь массив $logging
будет сериализован по сети.На вашем компьютере он десериализован, и каждая запись массива отправляется на ваш локальный конвейер.
Надеюсь, это поможет.