Top-Themen

Aktuelle Themen (A bis Z)

Administrator.de FeedbackApache ServerAppleAssemblerAudioAusbildungAuslandBackupBasicBatch & ShellBenchmarksBibliotheken & ToolkitsBlogsCloud-DiensteClusterCMSCPU, RAM, MainboardsCSSC und C++DatenbankenDatenschutzDebianDigitiales FernsehenDNSDrucker und ScannerDSL, VDSLE-BooksE-BusinessE-MailEntwicklungErkennung und -AbwehrExchange ServerFestplatten, SSD, RaidFirewallFlatratesGoogle AndroidGrafikGrafikkarten & MonitoreGroupwareHardwareHosting & HousingHTMLHumor (lol)Hyper-VIconsIDE & EditorenInformationsdiensteInstallationInstant MessagingInternetInternet DomäneniOSISDN & AnaloganschlüsseiTunesJavaJavaScriptKiXtartKVMLAN, WAN, WirelessLinuxLinux DesktopLinux NetzwerkLinux ToolsLinux UserverwaltungLizenzierungMac OS XMicrosoftMicrosoft OfficeMikroTik RouterOSMonitoringMultimediaMultimedia & ZubehörNetzwerkeNetzwerkgrundlagenNetzwerkmanagementNetzwerkprotokolleNotebook & ZubehörNovell NetwareOff TopicOpenOffice, LibreOfficeOutlook & MailPapierkorbPascal und DelphiPeripheriegerätePerlPHPPythonRechtliche FragenRedHat, CentOS, FedoraRouter & RoutingSambaSAN, NAS, DASSchriftartenSchulung & TrainingSEOServerServer-HardwareSicherheitSicherheits-ToolsSicherheitsgrundlagenSolarisSonstige SystemeSoziale NetzwerkeSpeicherkartenStudentenjobs & PraktikumSuche ProjektpartnerSuseSwitche und HubsTipps & TricksTK-Netze & GeräteUbuntuUMTS, EDGE & GPRSUtilitiesVB for ApplicationsVerschlüsselung & ZertifikateVideo & StreamingViren und TrojanerVirtualisierungVisual StudioVmwareVoice over IPWebbrowserWebentwicklungWeiterbildungWindows 7Windows 8Windows 10Windows InstallationWindows MobileWindows NetzwerkWindows ServerWindows SystemdateienWindows ToolsWindows UpdateWindows UserverwaltungWindows VistaWindows XPXenserverXMLZusammenarbeit

gelöst Powershell - LastExitCode aus Job?

Mitglied: Markus2016

Markus2016 (Level 1) - Jetzt verbinden

11.06.2017 um 00:22 Uhr, 1799 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
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.
Für ein Beispiel, wäre ich sehr dankbar.

Gruß

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

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.

@132934, danke für Dein Beispiel.

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

Wissenslücken, gibt es bei mir jede Menge. Aber ich arbeite immer wieder daran.
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 ..
Ähnliche Inhalte
Backup
Veeam Backup Job
Frage von adrian138Backup3 Kommentare

Veeam Backup & Replication v9.5 Hallo, Gerne möchte ich folgenden Backupjob einrichten: Daily Mo - Fr Inkrementell - Aufbewahrung 1 Woche Weekly jeden ...

Hardware
RTRR JOB Bricht ab
Frage von Florian961988Hardware7 Kommentare

Hallo, wir nutzen zwei identische NAS - System von Fujtisu Calvon NAS Q902! Eine NAS wird als aktiver Datenspeicher-Ort ...

Vmware
Veeam 9.5 - Restore job Fehler
Frage von master3477Vmware2 Kommentare

Moin, ich habe mit Veeam Backup and Replication einen Virtuellen Server gesichert. Nun kommt bei dem Versuch der Wiederherstellung ...

Windows Netzwerk
Backup Job im Netzwerk finden
Frage von hukahu23489Windows Netzwerk19 Kommentare

Hallo IT Speziallisten, ich bin am verzweifeln. Gibt es eine Möglichkeit, über das gesamte Netzwerk nach einem bestimmten Dateityp ...

Neue Wissensbeiträge
Humor (lol)

Funny: Warum es immer schwieriger wird, die richtigen Produkte online zu finden

Information von Dilbert-MD vor 1 TagHumor (lol)17 Kommentare

Wir befinden uns in der Rubrik "Off Topic - Humor" und in 15 Minuten ist Freitag. und ja, es ...

Windows Update
MS SQL Server Updates
Information von sabines vor 1 TagWindows Update

Für 2012, 2014 und 2016 sind seit Dienstag wichtige Sicherheitsupdates verfügar, die eine remote, leicht auszunutzende Lücke im Reporting ...

Microsoft Office

Microsoft warnt: Office 365 am 29. Februar leider nicht nutzbar

Information von Lochkartenstanzer vor 2 TagenMicrosoft Office11 Kommentare

Moin, Wie die Überschrift schon sagt, gibt es offensichtlicham 29. februar ein Problem: Microsoft warnt: Office 365 am 29. ...

Netzwerkmanagement
Siemens Switche initial konfigurieren
Tipp von brammer vor 2 TagenNetzwerkmanagement2 Kommentare

Hallo, Bisher gab es für Siemens Switche die Möglichkeit die initiale Konfiguration über den Simatic Manager oder das Primary ...

Heiß diskutierte Inhalte
Server-Hardware
Lieferzeiten bei einem Server - kann das sein?
gelöst Frage von samet22Server-Hardware31 Kommentare

Hallo, ich hätte an diejenigen eine Frage welche innerhalb der letzten 6-12 Monate einen Server bestellt haben. Ich habe ...

Verschlüsselung & Zertifikate
SSL Zertifikat gekauft funktioniert aber nicht
Frage von TeKiLLa1895Verschlüsselung & Zertifikate18 Kommentare

Hi, Habe vor 2 Tagen mit einer CSR mir ein Zertifikat beantragt und auch bekommen. Jetzt passt aber der ...

Humor (lol)
Funny: Warum es immer schwieriger wird, die richtigen Produkte online zu finden
Information von Dilbert-MDHumor (lol)17 Kommentare

Wir befinden uns in der Rubrik "Off Topic - Humor" und in 15 Minuten ist Freitag. und ja, es ...

Linux Tools
Wert aus eine bestimmte Zeile in eine andere Spalte ändern unter Linux Bash
gelöst Frage von OIOOIOOIOIIOOOIIOIIOIOOOLinux Tools15 Kommentare

Guten Tag, ich sitze gerade wiedermal vor einem Problem und muss unter Zeitdruck ein diesen lösen. Ich muss mit ...