Start-Process gibt tlw. keinen ReturnCode aus (PowerShell)

Mitglied: mayho33

mayho33 (Level 2) - Jetzt verbinden

26.01.2014, aktualisiert 28.03.2014, 5987 Aufrufe, 4 Kommentare, 1 Danke

Hallo @ All!

Irgendwie stehe ich wieder mal am Schlauch und hoffe wieder auf tatkräftige Starthilfe!

Hier mein Problem:

Ich rufe eine Exe auf via: $RC = (Start-Process -FilePath <Irgend eine exe> /s -PassTru)
-Wait gebe ich absichtlich nicht an ich will nämlich, dass in der PS-Console sowas wie ein Fortschrittsbalken läuft. das mache ich so:

do {
write-host "*" -NoNewLine
if ($RC.ExitCode -gt -1) { Break}
Start-Sleep 1
} until ($RC.ExitCode -gt -1)

write-host ("ExitCode: + $RC.ExitCode)


Jetzt kommt es vor, dass entweder die Schleife nicht beendet wird obwohl der ExitCode sicher 0 oder höher ist, oder der ExitCode ist $null.
mit -Wait bekomme ich natürlich immer eine ExitCode, da habe ich aber auch keine Fortschrittsbalken. Den will ich aber unbedingt haben, weil einige EXEn und MSIs ziemlich groß sind und entsprechend lange brauchen.


Hat jemand ne Idee wie ich da eine saubere und vor allem sichere Lösung zustande bekomme??

Danke!

Mayho
Mitglied: colinardo
27.01.2014, aktualisiert um 01:01 Uhr
Hallo Mayho,
Schau dir mal dieses Mulithreading-Beispiel an:
https://www.administrator.de/forum/powershell-gui-bleibt-w%C3%A4hrend-ei ...
Würde den Prozess in einen parallelen Thread verlagern worin du dann mit -wait auf den Prozess wartest und dann den Exit-Code an den Hauptthread übergibst. Gerade bei MSI-Dateien ist es so das die Shell auf das Ende von msiexec warten sollte, denn sonst kommt es zu dem Phänomen das ein falscher Exit-Code ausgegeben wird (das liegt daran das msiexec ursprünglich nicht als Konsolenanwendung ausgelegt worden ist)

Was auch eine Möglichkeit wäre ist das CMDlet Start-Job mit dem sich so was realisieren ließe. Melde mich dazu nochmal...

Bis dahin ...
Grüße Uwe
Bitte warten ..
Mitglied: colinardo
LÖSUNG 27.01.2014, aktualisiert 10.02.2014
Noch ein Beispiel wie du es machen kannst:
Grüße Uwe
Bitte warten ..
Mitglied: mayho33
29.01.2014, aktualisiert 10.02.2014
Hi Uwe!

Danke für die beiden Beispiele! Werde das mal in ner ruhigen Minute durchgehen. Multithreading habe ich noch nicht bedacht. Finde das ist eine tolle Idee.

Danke!

Mayho

EDIT

Hi Uwe!

nun hatte ich endlich Zeit das in meinen Code einzubauen.

Das zweite Beispiel von dir hat wunderbar geklappt ohne groß was anpassen zu müssen. Das Resultat ist wie gewünscht eine Progressanzeige in der Console. Auch die Returncodes kommen wie sie sollen.

Perfekt!! Vielen Dank!

Was habe ich daraus gelernt? Bei Problemen Uwe fragen :P

lg

Mayho!
Bitte warten ..
Mitglied: MPascalau
15.08.2015 um 18:46 Uhr
Ich habe vor lange Zeit gelesen, dass PowerShell mit ExitCode Eigenschaft von Process ein Problem hat.
Die Erklärung war viel zu Kompliziert, und ich habe vergessen.

Ich habe das Problem so korrigiert:
function Get-ProcessExitCode {
[CmdletBinding()]
param(
[parameter(Mandatory=$true, ValueFromPipeline=$true)]
[System.Diagnostics.Process]$Process)
Begin {
$private:type = [System.Diagnostics.Process]
$private:prop = $private:type.GetProperty("ExitCode")
}
Process {
return $private:prop.GetValue($Process)
}
}

$RC.WaitForExit() # Wait for process to finish!
$exitcode = Get-ProcessExitCode $RC # Get the ExitCode
Bitte warten ..
Heiß diskutierte Inhalte
Microsoft
STRG + ALT + ENTF
TezzlaVor 1 TagAllgemeinMicrosoft12 Kommentare

Mahlzeit zusammen, wir haben gerade im Kollegenkreis über Sinn und Unsinn der Sperrbildschirmentriegelung STRG + ALT + ENTF unter Win10 diskutiert. Mich würde hierzu ...

Video & Streaming
Streamingplattform mit eigenen Servern
gelöst icegetVor 1 TagFrageVideo & Streaming6 Kommentare

Hallo liebe Community, ich würde gerne via Amazaon AWS (oder andere Cloudanbietern) mehrere Serverinstanzen (Streaming) starten, um z.B. 2000 Personen den selben Stream den ...

Hardware
Outdoor LAN sichern mit oder ohne Fritzbox Verständnis Frage
bluescreenVor 1 TagFrageHardware15 Kommentare

Hallo zusammen, ich habe die letzten Stunden schon viel hier gelesen, stehe aber ein wenig auf dem Schlauch, wie und wo ich weiter suchen ...

Windows Server
Nutzer als lokaler Admin in Windows Server 2019
hanheikVor 1 TagFrageWindows Server6 Kommentare

Hallo, in SBS 2011 konnte ich ganz einfach einen Nutzer als lokalen Admin einstellen. Windows fragte dann, für welchen Rechner; Rechner auswählen; fertig! In ...

Windows Netzwerk
Telefone im Netzwerk bekannt machen
jannik0205Vor 22 StundenFrageWindows Netzwerk13 Kommentare

Hallo Zusammen, In unserem Unternehmen gibt es eine Telefonanlage mit eigenem Telefonienetz (192.168.5.X). Schließe ich ein Telefon an eine Netzwerkdose, bekommt es vom DHCP- ...

Windows 10
Windows 7 pro Lizenz nutzen für Windows 10
lukas0209Vor 17 StundenFrageWindows 1013 Kommentare

Hallo Community, ich versuche seit einigen Wochen unser Netzwerk von Windows Server 2008 R2 Standard auf Windows Server 2016 Essentials um, welches eine städtische ...

Datenschutz
Übergang von "Sorgfaltspflicht" im Datenschutz
ukulele-7Vor 1 TagFrageDatenschutz7 Kommentare

Hallo zusammen, mir ist eine, zugegeben eher juristische, Frage in den Sinn gekommen. In unserer Branche arbeiten wir mit sensiblen, personenbezogenen Daten die natürlich ...

Windows Server
Remotedesktop Lizenzzierungsserver
Leffe69Vor 1 TagFrageWindows Server11 Kommentare

Hallo! Ich habe zwei Win Server ohne AD: Win 2019 Standard - Auf diesem sind die RDS Zugriffslizenzen installiert. Win 2008 R2 - Dieser ...