Die Verwendung der richtigen Sitzungs-ID kann in der Tat erforderlich sein, um einen Job auf einem Remote-Computer ordnungsgemäß zu starten, auf den mehrere verschiedene Benutzer zugreifen.
Hier ist, was ich nach der Bastelei mit einer Kombination aus gefunden Batch - Befehlen und psexec . Ich habe alles in einer * .bat-Datei gerollt und dabei 4 Parameter genommen : (P1) Benutzername, (P2) Servername, (P3) Login, (P4) Passwort.
Nach der Ausführung (und falls erfolgreich) werden die Sitzungsinformationen einfach in 4 Variablen gespeichert : (V1) Sitzungsname, (V2) Sitzungsbenutzer, (V3) Sitzungs-ID, (V4) Sitzungszustand.
Der Stapel ist für den Fernzugriff auf Informationen konzipiert, kann jedoch leicht an die lokale Verwendung angepasst werden .
@echo off REM This program gets remote session info on a given server, for a given user. REM It needs 4 parameters: UserName, ServerName, Login, Password REM For a local session, simply replace the 'psexec \\...' command parsed by the 'for' REM loop with: 'query session ^| find /i "%UserName%"' REM In that case, only the UserName parameter is necessary to call this batch. set UserName=%1 set ServerName=%2 set Login=%3 set Password=%4 set SessionName= set SessionUser= set SessionId= set SessionState= for /f "tokens=1,2,3,4 delims=^> " %%a in ('psexec \\%ServerName% -u %Login% -p %Password% query session ^| find /i "%UserName%"') do ( REM Test iterator because a disconnected session may no longer have a name! if /I "%%b"=="%UserName%" ( set SessionName=%%a set SessionUser=%%b set SessionId=%%c set SessionState=%%d ) if /I "%%a"=="%UserName%" ( set SessionName=[unknown] set SessionUser=%%a set SessionId=%%b set SessionState=%%c ) ) echo Session info: echo - Name: %SessionName% echo - User: %SessionUser% echo - ID: %SessionId% echo - State: %SessionState%
ANMERKUNGEN:
- Die Trennzeichen der Schleife sind '>' und 'Leerzeichen'. Dies liegt daran, dass die Befehlsausgabe 'Abfrage Sitzung' ein '>' enthält, um die aktive Sitzung auf dem Zielcomputer anzuzeigen. Ich musste einen Weg für die Schleife finden, um dieses störende Zeichen zu ignorieren, da es normalerweise als Umleitung in eine Datei interpretiert wird.
- Ich ignorierte freiwillig den Sitzungstyp und Geräteausgänge. Ich glaube, sie könnten schließlich mit %% e und %% f hinzugefügt werden, um bei Bedarf 2 weitere Variablen in die Schleife einzugeben.
- Wie im Stapelkommentar erläutert, sollten Sie zur Verwendung des Stapels auf dem lokalen Computer nicht den Aufruf 'psexec \\ ...' verwenden, sondern: 'query session ^ | find / i "% UserName%" ' stattdessen. In diesem Fall wird nur der Parameter P1 benötigt.