Powershell - LastExitCode aus Job?

Mitglied: Markus2016

Markus2016 (Level 1) - Jetzt verbinden

11.06.2017 um 00:22 Uhr, 2370 Aufrufe, 7 Kommentare

Hallo zusammen,

über einen Job starte ich eine vbs und versuche über $LastExitCode auf Fehler zu reagieren.
Ich dachte, dass ich die über -PassThru zurück bekomme.

Wo habe ich meinen Deckfehler?

Wenn ich $LastExitCode festlege, macht das Script was es soll.

Somit wird $LastExitCode nicht an Powershell zurückgegeben.

Gruß

Markus2016
Mitglied: 132934
132934 (Level 1)
11.06.2017, aktualisiert um 08:22 Uhr
$LastExitCode enthält nur den Exit-Code eines extern ausgeführten Windows Programmes. Das kannst du also nur nutzen um beispielsweise. aus der Powershell heraus klassische Windows Programme aufzurufen und auf deren Exit-Code zu reagieren.

Die Powershell selbst arbeitet mit Exceptions. Du könntest also ganz normal mit Try-Catch-Finally auf das Ergebnis des Jobs reagieren. Wenn dir allerdings ein "o.k." reicht (Job fehlgeschlagen oder nicht) dann könntest du eventuell auch beim starten des Prozesses eine Error-Variable definieren und dann nach Erledigung des jobs einfach schauen ob dort etwas hineingespeichert wurde und das dann schlicht nach deinem Ansatz prüfen (nicht was sondern nur ob). Siehe dazu auch diesen Artikel aus dem Technet:

https://blogs.technet.microsoft.com/heyscriptingguy/2014/07/09/handling- ...

Viele Grüße

Airine
Bitte warten ..
Mitglied: Markus2016
11.06.2017 um 15:51 Uhr
Hallo Airine,

danke für Deinen Tipp.
Soweit, denke ich, habe ich das verstanden.

Da ich über ein ps-script, ein vb-script starte und dieses wiederum ein Programm ausführt, kann die Powershell nicht auf einen Fehler reagieren, welcher z.B. vom Windows Script Host ausgegeben wird?
Jedenfalls habe ich es bis jetzt nicht hinbekommen.

In diesem Beispiel habe ich den Vorgang, welcher aus dem vb-script gestartet wurde, manuell abgebrochen.
Dann wird flogende Meldung angezeigt:
win script host - Klicke auf das Bild, um es zu vergrößern
Diese kann ich zwar in dem vb-script unterbinden, jedoch sollte das ps-script doch darauf reagieren können.

Die Meldung exitiert in PS für $? oder $Error nicht?

Deshalb der ursprüngliche Ansatz mit der $LastExitCode.

Hoffe, dass ich jetzt nicht ganz daneben liege. :-) face-smile
Für ein Beispiel, wäre ich sehr dankbar.

Gruß

Markus2016
Bitte warten ..
Mitglied: 132934
132934 (Level 1)
LÖSUNG 11.06.2017, aktualisiert um 17:14 Uhr
Okey - da hat sich Halbwissen mit 'nicht richtig' lesen gepaart. Mein Fehler ;-) face-wink ...

Ich denke mal der Punkt ist, dass du das VBS Script in einem Sub-Prozess laufen lässt. Der ExitCode des VBS-Scriptes existiert also wahrscheinlich so nicht im Scope deiner Powershell-Session. Daher kannst du dann auch nicht mit $LastExitCode auf diesen zugreifen (Vermutung). Du müsstest dir den Exit-Code aus dem Sub-Prozess holen den du gestartet hast ($Process.ExitCode).

Willkürliches Beispiel:

Voraussetzung ist natürlich das dein VBS Script auch die Exit-Codes liefern kann, die du erwartest.
Das würde ich alles erstmal händisch prüfen so wie in dem Beispiel - also ohne den externen Job und die Fallunterscheidung, damit du weißt was da tatsächlich vom Prozess zurückgeliefert wird. Wenn alles so ist wie erwartet sollte dann die Ersetzung von $LastExitCode durch $Process.ExitCode reichen. Aber soetwas kann ich leider nicht mit der Glaskugel debuggen ^^ ... Probier es einfach mal aus. Ich taste mich da auch immer so Schritt für Schritt dran.
Bitte warten ..
Mitglied: colinardo
LÖSUNG 12.06.2017, aktualisiert 13.06.2017
Servus @Markus2016,
erst mal ist es so das du beim aktuellen Code ein VBS-Skript mit WScript im interaktiven Modus ausführst. D.h. also das eine mögliche Fehlermeldung den Thread "Blockiert", der User also interaktiv eingreifen muss (wegklicken der Fehlermeldung). Das ist meistens unerwünscht. Dafür gibt es aber den Schalter //B für den Batch-Modus zum Ausführen von VBS-Skripten.
Das reicht aber nicht für das Auswerten ob ein Fehler aufgetreten ist denn das unterdrückt erst einmal nur die Fehlerausgabe.
Du musst also in deinem Skript dafür sorgen das eventuelle Fehler aus dem Prozess zurückgegeben werden. Das kannst du in deinem Skript so machen:
(Habe jetzt absichtlich einen Fehler eingebaut (z existiert nicht) der einen Fehler triggert)
In deinem Powershell-Skript kannst du diese Fehler dann so abfangen:
Das Ergebnis (Ausgabe) ist der Error-Code des VBS-Scripts. Ist er 0 = alles OK, ungleich 0 = Problem.
Wenn du willst kannst du die Description des Fehlers auch noch zurückgeben (erhältst du mit Err.Description).

Wieso du hier aber noch ein VBS ausführst wo du doch mit Powershell arbeitest das alles was VBS kann und noch viel mehr??

Grüße Uwe

p.s. wieso du einen Skriptblock mit [scriptblock]::Create() in diesem Kontext erstellst erschließt sich mir leider überhaupt nicht, ist ja eigentlich überflüssiger Overhead. Vermutlich Wissenslücke?!
Bitte warten ..
Mitglied: Markus2016
13.06.2017 um 14:28 Uhr
Hallo Airine, Uwe,

vielen Dank Euch beiden für Eure Hilfe.

@Airine, danke für Dein Beispiel.

@colinardo,
mein VBS hatte soweit schon funktioniert.
Nur der Schalter \\B war mir nicht bekannt. :-) face-smile
Warum ich VBS verwende? Ich finde es einfach praktischer zu testen, da es per Doppelklick ausgeführt werden kann. :-) face-smile

Wissenslücken, gibt es bei mir jede Menge. Aber ich arbeite immer wieder daran. :-) face-smile
Ich hatte es anders einfach nicht hinbekommen.

Dein PS Bsp. funktioniert zwar, aber ich konnte es bis jetzt noch nicht in mein Script einbauen, so dass es funktioniert.
Ich brauche das Get-Job um die GUI entsprechend zu starten und dann wieder zu ändern.
Wenn ich das Receive-Job -Wait anhänge, funktioniert die GUI nicht mehr.

Hier mal mein ganzes Script. Vielleicht habt Ihr noch einen Tipp?
In diesem suche ich in einem definierten Ordner alle VBS.
Aus dem VBS wird der Name des zu installierenden Programms gelesen.
Die Schalter für das Setup sind im VBS enthalten.
Sobald das erste Programm gestartet wird, wird ein wait gif angezeigt.
Nach erfolgreich abgeschlossener Installation ein hacken, bzw. ein x bei einer fehlgeschlagenen Installation gesetzt.

Funktioniert soweit auch alles. Das Dumme ist nur, dass der Job immer Completed ist, auch wenn die VBS einen Fehler verursacht und das Programm dann nicht installiert wird.

Gruß

Markus2016
Bitte warten ..
Mitglied: Markus2016
15.06.2017, aktualisiert 25.06.2017
Hallo zusammen,

nachdem auch ich verstanden hatte, dass der ExitCode nur aufgrund des Job nicht im Script verügbar war , konnte ich mittels OutVariable das Problem lösen.

Danke an alle.

Gruß

Markus2016

Bitte warten ..
Heiß diskutierte Inhalte
Firewall
PfSense direkt an Glasfasermodem der Telekom über PPPoE
snah0815Vor 1 TagFrageFirewall24 Kommentare

Hallo Zusammen, nachdem ich die pfSense nun eine Zeit lang in einer Kaskade mit einer Fritzbox 7590 betrieben habe, möchte ich nun gerne die ...

Netzwerkmanagement
TIA568A oder B - Leistungsunterschiede oder egal?
gelöst alboshiroVor 1 TagFrageNetzwerkmanagement15 Kommentare

Hallo Zusammen, ich bin aktuell im Hausbau und habe in jedem Zimmer ein RJ45 CAT7 Ethernetkabel für jeden Raum verlegt. Jetzt müsste ich die ...

Internet
Kein Internet nach Windows 2019 Server Installation
gelöst ZygmundVor 21 StundenFrageInternet24 Kommentare

Computer : HP ProLiant DL580 Gen7 , 4x CPU , 16 GB ECC Ram, 1 TB SAS Installation von - Windows 8 Server - ...

LAN, WAN, Wireless
WLAN-ACCESSPOINT welche soll ich mir kaufen?
samet22Vor 1 TagFrageLAN, WAN, Wireless11 Kommentare

Hallo :) Ich halte mich kurz: Ich möchte mir neue WLAN-Accesspoints für die Firma kaufen da die jetzigen fast 7 Jahre alt sind und ...

Webentwicklung
Wo legt Joomla den Content im Verzeichnis ab ?
MachelloVor 1 TagFrageWebentwicklung17 Kommentare

Hallo Zusammen, ich habe folgendes Problem: Ich benötige Daten aus einer alten Joomla Webseite. Von dieser Webseite habe ich nur das komplette Verzeichnis vom ...

Monitoring
PC Monitoring Software?
TRON06Vor 1 TagFrageMonitoring9 Kommentare

Gibt es eine Monitoring Software (ähnlich wie HWiNFO) mit der man mehrere Computer überwachen kann (CPU auslastung, Festplatte, Temperatur Sensoren) und wo die Daten ...

Windows 10
Vom Homeoffice auf lokale Dateien zugreifen
SayllesVor 1 TagFrageWindows 106 Kommentare

Guten Morgen, meine Frau ist im Homeoffice, ihr Arbeitgeber stellt ihr einen Access der unter Server 2016 lauft zur Verfügung. Dieser Remote zugriff funktioniert ...

Netzwerke
DHCP-Probleme nach Switch-Wechsel
gelöst sausi77Vor 1 TagFrageNetzwerke7 Kommentare

Folgendes Problem: - hab meinen Switch gewechselt: vom Zyxel GS1900-24E auf einen Zyxel XGS1930 Seitdem haben mobile Clients (insbesondere auf iOS und Windows-Basis Probleme) ...