franc
Goto Top

Per SSH auf einem Windows PC ein Programm im Vordergrund starten

Hallo

Ich habe einen Windows 10 PC im Netzwerk, den ich per SSH Befehl (mit Bitvise Server auf dem W10-PC) steuern will.
Aber ein Programm, das ich damit starte ist und bleibt im Hintergrund.
Ich hätte gerne einen Befehl, wie ich ein per SSH gestartetes Programm im Vordergrund, also für den angemeldeten Benutzer, ausführen kann.
Ich verwende als SSH-Login die selben Logindaten wie für den gerade angemeldeten Benutzer auf Windows 10 Pro.

Der Windows PC (ein Sony SVF142C29M) dient als Medien-PC. Der ist am Beamer angeschlossen und per SSH-Befehle vom Handy aus (App: Smart Command SSH) kann ich ihn steuern.

Nein, ich bin per Suche nicht fündig geworden. Fand nur einen Befehl wie Export DISPLAY =:0 was wohl nichts mit Windows zu tun hat.
Danke

franc

Content-Key: 539090

Url: https://administrator.de/contentid/539090

Printed on: April 18, 2024 at 00:04 o'clock

Mitglied: 142232
142232 Jan 24, 2020 updated at 16:52:03 (UTC)
Goto Top
psexec mit Parameter -i benutzen dann wird das Programm in der Desktop-Session ausgeführt.

Copyright (C) 2001-2008 Mark Russinovich
Sysinternals - www.sysinternals.com

PsExec executes a program on a remote system, where remotely executed console
applications execute interactively.

Usage: psexec [\\computer[,computer2[,...] | @file][-u user [-p psswd]][-n s][-l][-s|-e][-x][-i [session]][-c [-f|-v]][-w directory][-d][-<priority>][-a n,n,...] cmd [arguments]
     -a         Separate processors on which the application can run with
                commas where 1 is the lowest numbered CPU. For example,
                to run the application on CPU 2 and CPU 4, enter:
                "-a 2,4"  
     -c         Copy the specified program to the remote system for
                execution. If you omit this option the application
                must be in the system path on the remote system.
     -d         Don't wait for process to terminate (non-interactive).  
     -e         Does not load the specified account's profile.  
     -f         Copy the specified program even if the file already
                exists on the remote system.

>>>>>>>>>>>>>>>>
     -i         Run the program so that it interacts with the desktop of the
                specified session on the remote system. If no session is
                specified the process runs in the console session.
<<<<<<<<<<<<<<<<<

     -l         Run process as limited user (strips the Administrators group
                and allows only privileges assigned to the Users group).
                On Windows Vista the process runs with Low Integrity.
     -n         Specifies timeout in seconds connecting to remote computers.
     -p         Specifies optional password for user name. If you omit this
                you will be prompted to enter a hidden password.
     -s         Run the remote process in the System account.
     -u         Specifies optional user name for login to remote
                computer.
     -v         Copy the specified file only if it has a higher version number
                or is newer on than the one on the remote system.
     -w         Set the working directory of the process (relative to
                remote computer).
     -x         Display the UI on the Winlogon secure desktop (local system
                only).
     -priority  Specifies -low, -belownormal, -abovenormal, -high or
                -realtime to run the process at a different priority. Use
                -background to run at low memory and I/O priority on Vista.
     computer   Direct PsExec to run the application on the remote
                computer or computers specified. If you omit the computer
                name PsExec runs the application on the local system,
                and if you specify a wildcard (\\*), PsExec runs the
                command on all computers in the current domain.
     @file      PsExec will execute the command on each of the computers listed
                in the file.
     program    Name of application to execute.
     arguments  Arguments to pass (note that file paths must be
                absolute paths on the target system).
Member: franc
franc Jan 26, 2020 updated at 10:13:29 (UTC)
Goto Top
Zitat von @142232:

psexec mit Parameter -i benutzen dann wird das Programm in der Desktop-Session ausgeführt.

Hm, das funktioniert aber nicht. Ich kann es wohl ausführen, also:

psexec.exe -i "c:\Program Files\VideoLAN\VLC\vlc.exe"  

Dann sehe ich im Process Explorer, dass VLC als derselbe Benutzer lauft, der auch aktuell angemeldet ist (und mit dessen Login ich mich auch per SSH angemeldet habe), aber es lauft keineswegs im Vordergrund. Man sieht es in der Taskleiste (wo es fixiert ist) auch nicht als aktiv (also kein blauer Strich unter dem Icon).

Was für einen Unterparameter erwartet denn der Parameter -i ? Also was wäre die Nummer der Session die gerade angemeldet ist?
Vielleicht ist das mein Fehler, dass ich da nichts angebe und dann verbindet psexec sich mit der Konsole, das ist ja vielleicht falsch?

Im Process Explorer kriege ich den Fehler "No visible windows found for this process", wenn ich in den Process Properties (von vlc.exe) auf 'Bring to front' klicke. Also wird vlc gar nicht, wie geplant in der aktiven Session gestartet, sondern doch im Hintergrund.

EDIT: vielleicht geht der -i Parameter auf Windows 10 einfach nicht mehr, also vielleicht erlaubt W10 das nicht?
Mitglied: 142232
142232 Jan 26, 2020 updated at 10:22:57 (UTC)
Goto Top
Zitat von @franc:
Hm, das funktioniert aber nicht. Ich kann es wohl ausführen, also:
Doch geht einwandfrei.
Was für einen Unterparameter erwartet denn der Parameter -i ? Also was wäre die Nummer der Session die gerade angemeldet ist?
Steht doch da, wenn du keinen Parameter mitgibst wird die Konsolen-Desktop-Session verwendet, also die wenn man sich direkt vor Ort am Host anmeldet. Wenn du stattdessen z.B. per RDP mit dem Remote Host verbunden wärst und dort das Programm interaktiv laufen soll wäre es eine andere Session, die Session ID bekommst du dann mit qwinsta oder auch query user
Vielleicht ist das mein Fehler, dass ich da nichts angebe und dann verbindet psexec sich mit der Konsole, das ist ja vielleicht falsch?
Wie gesagt, wenn lokal angemeldet braucht es keinen, wenn per RDP in anderer Session dann diese angeben
EDIT: vielleicht geht der -i Parameter auf Windows 10 einfach nicht mehr, also vielleicht erlaubt W10 das nicht?
Doch geht nach wie vor einwandfrei, hier getestet!
Member: franc
franc Jan 26, 2020 updated at 10:34:02 (UTC)
Goto Top
Jetzt habe ich im Process Explorer entdeckt, dass man auch die Rubrik "Session" anzeigen kann.
Starte ich den vlc über psexec mit -i (ohne Session) bleibt es ja im Hintergrund und die Session ist 0 (steht dort im Procexp unter "Session"). Ein direkt auf dem PC ausgeführter VLC hat dort eine 1, also ist Session 0 die Konsole und 1 ist der aktive Nutzer im Vordergrund.
Dann habe ich natürlich per SSH versucht:
psexec.exe -i 1 "c:\Program Files\VideoLAN\VLC\vlc.exe"  
und jetzt steht unter Session zwar 1 aber es ist immer noch nicht zu sehen, also bleibt im Hintergrund.
Außerdem wird der Prozess recht bald wieder beendet und in der SSH-Konsole lese ich:
C:\Program Files\VideoLAN\VLC\vlc.exe exited on GEOFFREY with error code 3.

EDIT: Deine Antwort erst nach Verfassen dieses Kommentars gelesen...
Member: franc
franc Jan 26, 2020 updated at 10:37:54 (UTC)
Goto Top
Zitat von @142232:
... EDIT: vielleicht geht der -i Parameter auf Windows 10 einfach nicht mehr, also vielleicht erlaubt W10 das nicht?
Doch geht nach wie vor einwandfrei, hier getestet!

Wie genau hast du es getestet, also von wo mit was und welchem von psexec ausgeführtem Programm?

Ich hab jetzt auch mal einfach den Explorer mit Session 1 per psexec gestartet und da kommt dann errorcode 1 (also nicht 3) und stürtzt also auch ab.
Member: franc
franc Jan 26, 2020 at 11:15:09 (UTC)
Goto Top
Ich finde aber auch sonst im Netz nichts passendes dazu. Ich suche mit: "ssh psexec programm im vordergrund" o.ä. aber kriege alleinfalls diesen Thread.

Langsam ahne ich warum: psexec ist wohl gar nicht dafür gedacht, über ssh auf dem remote PC ausgeführt zu werden, sondern anstatt ssh. Von PC1 mit psexec und irgendein Programm als Parameter auf PC2.
Mein Problem ist aber, dass ich gar keinen PC zum Steuern habe, sondern einen Mac. Psexec gibt es auf dem Mac ja gar nicht.

Auf dem entfernten PC startet der VLC brav, wenn ich dort (und nicht per ssh, sondern z.B. TeamViewer/AnyDesk o.ä.) vlc mit psexec starte.
Mitglied: 142232
Solution 142232 Jan 26, 2020 updated at 12:18:27 (UTC)
Goto Top
Zitat von @franc:
Langsam ahne ich warum: psexec ist wohl gar nicht dafür gedacht, über ssh auf dem remote PC ausgeführt zu werden, sondern anstatt ssh. Von PC1 mit psexec und irgendein Programm als Parameter auf PC2.
Nein, psexec macht das auch alles lokal, das ist egal.

Wenn du in der Konsole nicht warten willst bis das Programm beendet ist, füge den Parameter -d hinzu dann wird das Programm ausgeführt und die Kommendozeile kehr direkt zurück.

Bei manchen Rechnern musst du noch die lokale Maschine als Parameter hinzufügen
psexec \\127.0.0.1 -d -i "c:\Program Files\VideoLAN\VLC\vlc.exe"  

Mein Problem ist aber, dass ich gar keinen PC zum Steuern habe, sondern einen Mac. Psexec gibt es auf dem Mac ja gar nicht.
Auf dem steuernden Rechner brauchst du es ja auch nicht, das muss nur auf der Windows Kiste liegen, du bist dort ja per SSH verbunden!
Wie genau hast du es getestet, also von wo mit was und welchem von psexec ausgeführtem Programm?
Per SSH auf der Winblows Kiste eingeloggt und dann den Rechner gestartet, voila calculator comes up. Habe ich aber auch mit VLC mal testweise probiert, geht ebenfalls.

Guckst du

screenshot

Das selbe dann noch mal über einen SSH-Tunnel mit umgeleiteten Remoteverwaltung Ports der Windows Kiste, ebenfalls erfolgreich. Alles auf ein aktuelles Windows 10 Enterprise Target mit dem integrierten OpenSSH-Server von W10.

Ansonsten liegt es vermutlich an deiner genutzten SSH-Server Software.

Für solche Szenarien habe ich mir selbst mal einen Dienst geschrieben der auf Remote-Befehle an einem Port lauscht und dort meine Befehle entgegen nimmt, einfacher TCP-Listener der dann die Befehle in der lokalen Konsole ausführt. Kannst du dir mit fast jeder Programmier- oder Skriptsprache auch selber bauen ...

Alternativ kannst du dir auch einen Taskscheduler-Task basteln der die jeweiligen Programme im Kontext des Users ausführt und den du dann per Remote antriggerst, das wäre eine weitere Möglichkeit.
schtasks /create /TN StartVLC /TR "C:\Program Files\VideoLAN\VLC\vlc.exe" /SC ONCE /ST 00:00  
schtasks /run /tn StartVLC
Feddisch. Tausende Möglichkeiten, da braucht man kein Joooogle für, nur den gesunden Menschenverstand face-smile

--
p.s. man kann auch alles in eine Antwort packen face-confused
Member: franc
franc Jan 26, 2020 updated at 19:00:12 (UTC)
Goto Top
Vielen Dank!

Mit dem Taskscheduler/Aufgabenplaner (schtasks) und deinen Befehlen funktionert es!!!

Mit calc (und psexec) geht es bei mir tastsächlich auch über ssh, das Rechnerfenster öffnet sich!
Aber nicht mal mit notepad und eben nicht mit vlc, bleiben beide im Hintergrund.

Auf dem PC selbst im Terminal kann ich übrigens per psexec -i -d vlc.exe starten und es kommt im Vordergrund, also mit Anzeige.

Ich habe den Bitvise SSH Server installiert, ich wusste gar nicht, dass es einen SSH-Dienst bei W10 gibt. Habe ich soeben aktiviert.
Habe also den Bitvise aus, den OpenSSH von W10 an und noch mal probiert: keine Änderung leider.

Wies auch sei, dann geht es halt nicht. Mit dem schtasks geht es, das reicht ja.

Danke.