InvalidOperation: (:) [Start-Process], InvalidOperationException - PullRequest
0 голосов
/ 29 мая 2019

Я получаю следующую ошибку:

Эта команда не может быть выполнена из-за ошибки: система не может найти указанный файл.+ CategoryInfo: InvalidOperation: (:) [Start-Process], InvalidOperationException + FullyQualifiedErrorId: InvalidOperationException, Microsoft.PowerShell.Commands.StartProcessCommand + PSComputerName: XXXXXX.yyy.com

1006 * здеськод:
if (($ToolsStatus -eq 'toolsOk' -OR $ToolsStatus -eq 'toolsOld') -AND $VMVSSStatus -eq $null -AND $OperatingSystem -match "64-bit" ) {
            try{
                Copy-Item -Path ".\64bit\$ToolsVersion.exe" -Destination "\\$FQDN\c$\"  -Container -Recurse -Force -ErrorAction Stop
                "File $ToolsVersion.exe copied on $vmName" | Do-Log
                try {
                    Invoke-Command -ComputerName $FQDN -ScriptBlock { 
                        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 
                        "Installation completed on $vmName" | Do-Log
                        taskkill /IM vmtoolsd.exe /F
                        "VMtools process killed on $vmName" | Do-Log
                        Start-Service -Name VMTools
                        "VMware Tools service was started on $vmName" | Do-Log
                    } 
                }
                catch [System.Management.Automation.RuntimeException]#PSRemotingTransportException
                {
                     "Unable to install on $vmName. Following error was encountered:" +$_.Exception.GetType().FullName | Do-Log
                }

Пожалуйста, помогите.

1 Ответ

1 голос
/ 29 мая 2019

Я предполагаю, что переменная $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 будет сериализован по сети.На вашем компьютере он десериализован, и каждая запись массива отправляется на ваш локальный конвейер.

Надеюсь, это поможет.

...