Batch oder PS Skript startet Programm nur als Prozess ohne GUI
Wir haben eine Software im Einsatz welche auf den Clients für updates als admin gestartet werden muss.
Diese wollten wir mit Hilfe eines Batch bzw. PS Skript realisieren.
Das Skript kann unser Monitoring im systray zur manuellen Auswahl zur Verfügung stehen. Übers Monitoring ist auch direkt die die Zugangsdaten hinterlegt so dass nichts im. Skript steht.
Das Problem ist das die Software nur als Prozess gestartet wird ohne GUI, das reicht für Updates leider nicht aus.
Ist jemanden so ein Problem bekannt? Kennt jemand einen Trick?
Diese wollten wir mit Hilfe eines Batch bzw. PS Skript realisieren.
Das Skript kann unser Monitoring im systray zur manuellen Auswahl zur Verfügung stehen. Übers Monitoring ist auch direkt die die Zugangsdaten hinterlegt so dass nichts im. Skript steht.
Das Problem ist das die Software nur als Prozess gestartet wird ohne GUI, das reicht für Updates leider nicht aus.
Ist jemanden so ein Problem bekannt? Kennt jemand einen Trick?
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 672543
Url: https://administrator.de/forum/batch-oder-ps-skript-startet-programm-nur-als-prozess-ohne-gui-672543.html
Ausgedruckt am: 21.04.2025 um 18:04 Uhr
37 Kommentare
Neuester Kommentar
Moin,
die Frage ist hier ein Klassiker, kommt regelmäßig und ist immer problematisch im Hinblick auf die Zugangsdaten.
Guter Ausgangspunkt der kürzliche Thread: Batch-Datei mit Admin-Rechten ausführen ohne das Passwort raus zu geben.
Gruß
DivideByZero
die Frage ist hier ein Klassiker, kommt regelmäßig und ist immer problematisch im Hinblick auf die Zugangsdaten.
Guter Ausgangspunkt der kürzliche Thread: Batch-Datei mit Admin-Rechten ausführen ohne das Passwort raus zu geben.
Gruß
DivideByZero
Moin.
Schätze, evtl. halb/halb.
Zu klären ist, was du mit "Monitoring" meinst?
Soll der Benutzer das als Admin-gestarte Update in der GUIbdurchführen? Dann gibt es das Passwort-Problem.
Oder wird mit dem Start des Scripts zigleich eine Rempte-Monitoring Tool gestartet, sprich ein berechtigter Admin führt das Update aus?
Dann muss er das im Admin-Kontext als "interaktiv" gestartete Programm mit Admin-Passwort bestätigen.
Zitat von @Maba90:
Genau aber da hilft leider der Beitrag nicht weiter.
Oder ich stehe komplett auf dem Schlauch
Genau aber da hilft leider der Beitrag nicht weiter.
Oder ich stehe komplett auf dem Schlauch
Schätze, evtl. halb/halb.
Zu klären ist, was du mit "Monitoring" meinst?
Soll der Benutzer das als Admin-gestarte Update in der GUIbdurchführen? Dann gibt es das Passwort-Problem.
Oder wird mit dem Start des Scripts zigleich eine Rempte-Monitoring Tool gestartet, sprich ein berechtigter Admin führt das Update aus?
Dann muss er das im Admin-Kontext als "interaktiv" gestartete Programm mit Admin-Passwort bestätigen.
Stichwort Impersonation, damit holt man sich das Anmelde-Token des aktuellen Users und kann so dem User aus dem privilegierten Prozess heraus eine GUI präsentieren:
Powershell: Aufgabe im Hintergrund MsgBox in Vordergrund
Alternativ einen priv. Service etablieren der mit einer separaten GUI kommuniziert, z.B. über Pipes.
Oder nen priv. Tasktrigger der auf einen vom User ausgelösten Event im Eventlog reagiert...
Gibt es also diverse Möglichkeiten das zu gestalten .... 🖖🐇
Powershell: Aufgabe im Hintergrund MsgBox in Vordergrund
Alternativ einen priv. Service etablieren der mit einer separaten GUI kommuniziert, z.B. über Pipes.
Oder nen priv. Tasktrigger der auf einen vom User ausgelösten Event im Eventlog reagiert...
Gibt es also diverse Möglichkeiten das zu gestalten .... 🖖🐇
Zitat von @Maba90:
Man kann mit Hilfe unseres Monitoring Programm sagen das das Skript
-als angemeldete Benutzer
- admin
-System ausgeführt wird
Sagt man als angemeldeter Benutzer startet das Programm normal mit GUI allerdings geht kein Update da zu wenig Rechte
Sagt man als admin oder System startet das nur der Prozess
Man kann mit Hilfe unseres Monitoring Programm sagen das das Skript
-als angemeldete Benutzer
- admin
-System ausgeführt wird
Sagt man als angemeldeter Benutzer startet das Programm normal mit GUI allerdings geht kein Update da zu wenig Rechte
Sagt man als admin oder System startet das nur der Prozess
Moin,
Das ist normal, da weder der System-Account noch der andere Admin-Account Zugriff auf die Desktopsitzung haben.
Folge dem Rat/Link von Biberman, oder verwende Tools dafür wie ServiceUI.exe (google)
Zitat von @Maba90:
Es muss die GUI von der Software in den Vordergrund kommen da dort der Button Update ja oder nein erscheint.
Cmd Box bringt uns nichts
Es muss die GUI von der Software in den Vordergrund kommen da dort der Button Update ja oder nein erscheint.
Cmd Box bringt uns nichts
Dann starte die Software mit o.g. Methoden?
Zitat von @Maba90:
Es muss die GUI von der Software in den Vordergrund kommen da dort der Button Update ja oder nein erscheint.
Cmd Box bringt uns nichts
Es muss die GUI von der Software in den Vordergrund kommen da dort der Button Update ja oder nein erscheint.
Cmd Box bringt uns nichts
Oh Mann, die MsgBox war doch nur ein "Beispiel" für die Verwendung... Du kannst damit ganz unten im Skript an Prozessen einbauen was du willst.
Nimm das Skript von Biberman und ersetze in der letzten Zeile
mit dem Program, welches du starten willst, z.B: notepad
Die 4 Parameter sind
Pfad der Exe
Parameter für die exe
Ausführen in welchem Ordner
Sichtbar oder nicht
[Runasuser.ProcessExtensions]::StartProcessAsCurrentUser("C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe"," -EP Bypass -C `"Add-Type -A System.Windows.Forms;[System.Windows.Forms.MessageBox]::Show('Das ist eine Nachricht!','Benachrichtigung',0,64)`"","C:\windows",$false)
mit dem Program, welches du starten willst, z.B: notepad
[Runasuser.ProcessExtensions]::StartProcessAsCurrentUser("C:\Windows\System32\notepad.exe", "", "C:\Windows\System32\",$true)
Die 4 Parameter sind
Pfad der Exe
Parameter für die exe
Ausführen in welchem Ordner
Sichtbar oder nicht
Zitat von @Maba90:
Genau das ist das was ich die ganze zeit meine, es muss die Möglichkeit bestehen das der user die Aktion (Button ja jetzt updaten) drücken kann und das update durch geführt wird.
Das wäre ja eine Sicherheitslücke sonders gleichen wenn ein normaler unprivilegierter User eine elevierte UI benutzen dürfte, daraus könnte er ja ausbrechen und andere privilegierte Prozesse starten. Das geht so nicht, die GUI muss mit einem anderen privilegierten Prozess kommunizieren (Dienst/Task), oder sie muss die UAC triggern damit man sich als Admin ausgeben und den Prozess elevierte ausführen kann.Genau das ist das was ich die ganze zeit meine, es muss die Möglichkeit bestehen das der user die Aktion (Button ja jetzt updaten) drücken kann und das update durch geführt wird.
Um welches Programm geht es denn überhaupt?
Zitat von @BiberMan:
Wieso überhaupt ne GUI? Nur um nen Button zu drücken? Gibt es für die so geheime Software keine Silent-Schalter oder Updatepakete für ein Silent-Update? Dann muss der User da gar nichts mehr machen.
Wieso überhaupt ne GUI? Nur um nen Button zu drücken? Gibt es für die so geheime Software keine Silent-Schalter oder Updatepakete für ein Silent-Update? Dann muss der User da gar nichts mehr machen.
Das interessiert mich auch. Vermute ein XY-Problem. Alternativ schlechte Software..
Die Software wird ja irgendwo nach Updates fragen, z.B. per Webrequest. Das kann man ja einfach mal mitschneiden und sich das Update selbst ziehen und dann per Task/Script installieren lassen, dann wird der User auch nicht mehr behelligt. Sowas lässt sich nat. auch noch automatisieren/scripten.
Ist die Software-Titel/Hersteller so ein Geheimnis?? Vielleicht haben wir oder andere ja schon selbiges fertig als Lösung parat, soll ja sicher noch andere geben die sowas brauchen.
Ist die Software-Titel/Hersteller so ein Geheimnis?? Vielleicht haben wir oder andere ja schon selbiges fertig als Lösung parat, soll ja sicher noch andere geben die sowas brauchen.
Okay, starte die Installation als SYSTEM mit den Parameter "/VERYSILENT /SUPPRESSMSGBOXES"
Prüfe dann den ExitCode. Wenn dieser 0 ist, war das Update erfolgreich.
Das führt ein Update durch ohne den Nutzer zu behelligen. Unter Umständen musst du das Programm vorher mit
taskkill /f /im ProzessName
Wie habe ich das rausgefunden? Starte das Programm von einem Terminal mit dem Parameter /?
Wenn du die setup.exe der neuen Version so ausführst wie oben beschrieben, wird das Programm ja geupdatet, ohne dass eine Interaktion des Nutzers nötig ist. Also passe dein vorhandenes Skript, welches du als Administrator oder SYSTEM ausführst, so an, dass es 1) "taskkill /f /im ProzessName.exe" und 2) "setup.exe /VERYSILENT /SUPPRESSMSGBOXES" ausführt.
Du musst dann halt wenn ein Update verfügbar ist, dieses herunterladen und für das Skript hinterlegen.
Das kann man auch automatisieren, indem man die Datei regelmäßig runterlädt, dan Hash mit der aktuell lagernden .exe vergleicht, und bei einer Abweichung automatisch austauscht. Würde ich allerdings nicht empfehlen, da du dir so direkt was einfängst, falls der Softwareanbieter gehackt wird und die .exe vom Angreifer modifiziert oder getauscht wird. Nennt sich supply chain attack, ist so unter Anderem bei Solarwinds schon passiert.
Du musst dann halt wenn ein Update verfügbar ist, dieses herunterladen und für das Skript hinterlegen.
Das kann man auch automatisieren, indem man die Datei regelmäßig runterlädt, dan Hash mit der aktuell lagernden .exe vergleicht, und bei einer Abweichung automatisch austauscht. Würde ich allerdings nicht empfehlen, da du dir so direkt was einfängst, falls der Softwareanbieter gehackt wird und die .exe vom Angreifer modifiziert oder getauscht wird. Nennt sich supply chain attack, ist so unter Anderem bei Solarwinds schon passiert.
Die Exe hat doch die silent Parameter schon. 🤔.
Also echt jetzt, jetzt wird's peinlich.
Also echt jetzt, jetzt wird's peinlich.
Du kannst auch die EXE verwenden, da musst du nichts entpacken
Wenn ich jedesmal die Exe doch runterladen muss, dann haben ich leider nichts gewonnen.
Doch, sogar eine Menge, denn Du musst sie ja nur 1x herunterladen, ab da übernimmt das Skript. Es entfallen also die Downloads an jeder Station (kannst Du ja verteilen lassen) sowie die von Euch - verständlicherweise - nicht mehr gewünschte manuelle Updateklickerei an jedem Client.Es geht darum, dass es User ohne Admin selber aktualisieren kann, sobald die neue Version zur Verfügung steht
Geht ja auch, siehe eingangs verlinkter Thread, aber mit den Nachteilen, dass dann eben, egal, wie kunstvoll es "versteckt" ist, ein Elevation- und Passwort-Problem entsteht. Daher ist die von den Kollegen dargestellte Variante einer Silentinstallation natürlich deutlich eleganter und sicherer. Einen Kompromiss wirst Du schließen müssen.Aber es muss doch einen einfachen weg geben, dass die Software als Admin gestartet werden kann und das normale Update durch läuft,
Das geht dann z.B. damit, wie in dem anderen Thread erwähnt. Wie gesagt, nicht empfehlenswert, wenn es andere Alternativen, wie hier, gibt.Wir haben leider an verschieden Standorten noch eine 2000 DSL da dauert der Download von der setup, und wenn es übers Programm läuft sieht der User wenigsten das etwas am laufen ist.
Der User braucht doch keinen Fortschritt, wenn Du die Exe zentral verteilst und silent installiert. 🤔
Ich möchte Dir nicht zu nahe treten, aber das klingt nach einem: ich will es aber nicht.
Natürlich ist dann 1x händisch etwas zu tun, aber dafür entfallen 99% der Schritte.
Und Laptops: die haben ja sowieso das Problem, dass sie dann, wenn sie irgendwann mal wieder an sind, wohl erst einmal etliche Windowsupdates starten wollen. Da muss der User dann halt warten, bei denen käme das Updateskript halt per GPO zum Login.
Alternative habe ich Dir auch aufgezeigt, wird halt mit weniger Sicherheit erkauft.
Natürlich ist dann 1x händisch etwas zu tun, aber dafür entfallen 99% der Schritte.
Und Laptops: die haben ja sowieso das Problem, dass sie dann, wenn sie irgendwann mal wieder an sind, wohl erst einmal etliche Windowsupdates starten wollen. Da muss der User dann halt warten, bei denen käme das Updateskript halt per GPO zum Login.
Alternative habe ich Dir auch aufgezeigt, wird halt mit weniger Sicherheit erkauft.