Home > Mobile >  Powershell Invoke Command is not working for Remote Machine and did not returning any error message
Powershell Invoke Command is not working for Remote Machine and did not returning any error message

Time:01-24

I am trying to install my MSI package on the remote machine. Below is the script I am using. In this script, The invoke command execution is not returning any error or success message.but the copy command is working fine. anyone help to find the issue.

param([String]$MSILocation,[String]$RemoteComputerName,[String]$UserName,[String]$Password,[String]$Port,[String]$AccessKey,[String]$Protocol)
$ServeAdminPassword=  $Password  | ConvertTo-SecureString -AsPlainText -Force
$cred=New-Object System.Management.Automation.PSCredential($UserName,$ServeAdminPassword)
$hostname = hostname
$session = New-PSSession -ComputerName $RemoteComputerName -Credential $cred
$cpy   = Copy-Item $MSILocation  -Destination "C:\Users\Administrator\Desktop\" -ToSession $session
try
{
    $result = Invoke-Command -Session $session -ScriptBlock  {
        param($hostname,$Port,$Protocol)
         $value = msiexec /i "C:\Users\Administrator\Desktop\software.msi" SERVERNAME=$hostname PORTNO=$Port PROTOCOL=$Protocol /qb /forcerestart
        calc.exe
    } -ArgumentList $hostname,$Port,$Protocol | Select-Object value

}
catch
{
    $result = $error[0]
    echo $result
}

CodePudding user response:

  • msiexec is unusual in that it runs asynchronously by default, so you need to explicitly wait for its termination in order to learn its exit code.

  • The exit code is never returned via output (stdout); instead, depending on invocation technique, you must query a Process object's .ExitCode property (when you use Start-Process -Wait -PassThru) or use the automatic $LASTEXITCODE variable (when you use the technique shown below).

A simple way to force synchronous execution and have the exit code be reflected in $LASTEXITCODE is to call via cmd /c:

# Call msiexec and wait for its termination.
cmd /c "msiexec /i C:\Users\Administrator\Desktop\software.msi SERVERNAME=$hostname PORTNO=$Port PROTOCOL=$Protocol /qb /forcerestart"
$LASTEXITCODE # Output msiexec's exit code.

See this answer for details.

  •  Tags:  
  • Related