2

I'm trying to write a script to install software on many computers. The problem is, they have to be installed in specific order and I need to know that the first installation succeeded before running the second one.

here's the important code:

[...]

# source_one
$Argumente = @("/i", $path_to_source, "/qb", "ADDLOCAL=ALL")
if (!$visWeb_upToDate)    { 
  Write("VIS Web-Client Installation...")
  $procWeb = Start-Process msiexec.exe -ArgumentList $Argumente -Verb runAs -PassThru 
  $procWeb.WaitForExit()
  Write-Debug($procWeb.ExitCode)

  if ($procWeb.ExitCode -eq 0){
    Write("... erfolgreich.")
    $visWeb_upToDate = $true;
  }
  else {
    Write-Error("... nicht erfolgreich.")
    Write-Error("Bitte Clients manuell installieren.")
  }
}

# source_two
if ($visWeb_upToDate -and !$vis64_upToDate){
  Write("VIS 64-Bit Client Installation...")
  $Argumente[1] = $path_to_another_source
  $procWeb64 = Start-Process msiexec.exe -ArgumentList $Argumente -Verb runAs -PassThru 
  $procWeb64.WaitForExit()
  Write-Debug($procWeb64.ExitCode)

  if ($procWeb64.ExitCode -eq 0){
    Write("... erfolgreich.")
    $vis64_upToDate = $true
  }
  else {
    Write-Error("... nicht erfolgreich.")
    Write-Error("Bitte 64-Bit Client manuell installieren.")
  }
}

[...]

I don't get $procWeb.ExitCode on Windows7 Powershell. On Win8 it works just fine and installs source_one and source_two only on success of the first.

Does somebody know how to fix this, or is there some other way to set $visWeb_upToDate = $true for both systems?

Many thanks in advance.

chrosey
  • 220
  • 3
  • 15

1 Answers1

1

Your issue is identified as a bug in powershell.

You can get the exitcode, but only after Calling the .HasExited property of the process and using a strange syntax.

So as an example change the code to:

if ($procWeb.HasExited -and ($procWeb.GetType().GetField("exitCode", "NonPublic,Instance").GetValue($procWeb)) -eq 0){
  Write("... erfolgreich.")
  $visWeb_upToDate = $true;
}
  else {
    Write-Error("... nicht erfolgreich.")
    Write-Error("Bitte Clients manuell installieren.")
  }
}

Find the details on the bug here

Jower
  • 565
  • 2
  • 8
  • right now, I am trying your suggestion. As for now it seems to work. in a few minutes I will see if it works for every single case. – chrosey Aug 03 '15 at 07:57