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

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
}

Solution 1:

  • 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.