Die Verwendung der richtigen Sitzungs-ID kann in der Tat erforderlich sein, um einen Job auf einem Remotecomputer, auf den mehrere unterschiedliche Benutzer zugreifen, angemessen zu starten.
Folgendes habe ich gefunden, nachdem ich an einer Kombination aus Batch-Befehlen und psexec herumgebastelt habe . Ich habe alles in einer * .bat-Datei mit 4 Parametern zusammengefasst : (P1) Benutzername, (P2) Servername, (P3) Login, (P4) Passwort.
Nach der Ausführung (und bei Erfolg) werden die Sitzungsinformationen einfach in 4 Variablen gespeichert : (V1) Sitzungsname, (V2) Sitzungsbenutzer, (V3) Sitzungs-ID, (V4) Sitzungsstatus.
Der Stapel ist für den Fernzugriff auf Informationen konzipiert, kann jedoch problemlos 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 Schleifenbegrenzer sind '>' und 'Leerzeichen'. Dies liegt daran, dass die Befehlsausgabe 'Abfragesitzung' ein '>' enthält, um die aktive Sitzung auf dem Zielcomputer anzugeben. Ich musste einen Weg finden, wie die Schleife dieses störende Zeichen ignorieren konnte, da es normalerweise als Umleitung in eine Datei interpretiert wird.
- Ich freiwillig die Sitzung ignoriert Art und Geräteausgänge. Ich glaube, sie könnten eventuell mit %% e und %% f hinzugefügt werden, um bei Bedarf zwei weitere Variablen in die Schleife einzuspeisen.
- Wie im Stapelkommentar erläutert, sollten Sie zur Verwendung des Stapels auf dem lokalen Computer nicht den Aufruf 'psexec \\ ...' verwenden, sondern: 'Abfragesitzung ^ | finde stattdessen / i "% UserName%" ' . In diesem Fall wird nur der Parameter P1 benötigt.