2015-01-22 14 views
5

Beispiel: Ich bin als Benutzer TestUser angemeldet. Von diesem Benutzer werde ich eine Befehlszeile als Administrator namens AdminUser ausführen.Aktuell angemeldeten Benutzer unter Windows

Kann über diese Befehlszeile der Name des aktuell angemeldeten TestUsers ermittelt werden?

Ich habe bereits Task geplant, die immer als AdminUser ausgeführt wird, aber in seiner Aktion (Batch-Datei) muss ich den Namen des derzeit angemeldeten Benutzers benennen.

Irgendwelche Ideen?

+0

Können Sie klären, was mit "aktuell angemeldeter Benutzer" gemeint ist? Beschränken Sie dies auf die Konsole? Zählen Remotedesktopverbindungen? Wenn dies ein Server-Betriebssystem ist, wie würden Sie zwischen RDP-Cilents wählen? – mojo

+0

nicht sicher, weil kann im Moment nicht versuchen, aber 'tasklist/v | finden" explorer.exe "' Hilfe? – Stephan

+1

Mögliches Duplikat von * [Wie finden Sie den aktuellen Benutzer in einer Windows-Umgebung?] (Http://stackoverflow.com/questions/1607271/how-do-you-find-the-current-user-in-a- Windows-Umgebung) *. –

Antwort

5

Soweit ich weiß, ist das nicht wirklich möglich.

Der

Befehl
qwinsta 

Sie für den Computer eine Liste der Sitzungen geben: Je nachdem, wie viel wissen Sie über die Umgebung der Benutzer kann die folgenden eine Abhilfe jedoch sein. Innerhalb dieser Sitzungen wird einer der aktive sein, wenn also dieses Programm in einer interaktiven Sitzung verwendet wird, enthält es nur den "angemeldeten Benutzer", wie Sie es beschrieben haben (es ist viel komplizierter, es könnten viele Benutzer angemeldet sein) aber nur einer kann aktiv sein und ich hoffe nur, dass Sie genug über das Nutzungsszenario Ihres Programms wissen, um davon Gebrauch zu machen. Sie könnten die Ausgabe analysieren und mit diesem Benutzernamen arbeiten.

Natürlich ist dies ein schmutziger Hack und es wird davon ausgegangen, dass während der Laufzeit Ihrer Aufgabe keine Änderung der Benutzer möglich ist.

Auch wenn ich die qwinsta.exe gewählt habe, weil es ein sehr grundlegender Ansatz ist, der keine API-Aufrufe oder etwas benötigt, bin ich immer noch nicht sicher, ob der CMD genug Parsing-Fähigkeiten hat, um die notwendigen Informationen für Sie zu bekommen.

+0

Danke. Diese Lösung wird normalerweise funktionieren. Aber für meinen Fall nicht. Ich werde dir sagen warum. Grundsätzlich muss ich die Batch-Datei nur beim Abmelden des Administrators ausführen. Meine Aufgabe wird also beim Sicherheitsereignis 4647 ausgelöst (Ereignis abmelden). Also teste ich Ihren Vorschlag und es gibt keine aktiven Sitzungen mehr. Ich habe versucht, dies über Gruppenrichtlinien-Abmeldeskripts über die Registrierung durchzuführen, aber es ist sehr instabil und funktioniert nicht für mich. – dEVIANT

+1

Sie brauchen also nicht den aktiven Benutzer, sondern den zuletzt aktiven? In diesem Fall würde ich eine andere Problemumgehung vorschlagen. Wenn Sie keine Remote-Sitzungen garantieren können, können Sie den Schlüssel HKLM \ Software \ Microsoft \ Windows \ CurrentVersion \ Authentication \ LogonUI \ LastLoggedOnUser ausprobieren. Dies ist im Grunde der Schlüssel, den Windows verwendet, um Ihnen den letzten Benutzer auf dem Anmeldebildschirm anzuzeigen. Remotesitzungen werden dort nicht gespeichert ... Wenn Sie sie haben, würde ich sagen, dass Sie ein Programm schreiben, das bei jedem Login einen reg-Schlüssel oder eine Datei mit der Benutzerinfo überschreibt und später Ihre eigenen Informationen abfragt. – Syberdoor

+0

Großartig! Das funktioniert sehr gut! – dEVIANT

4

%username% Variable enthält .. nun, der Benutzername.

echo/%username%

EDIT

Wie Sie gesagt haben, weil Sie in einer geplanten Aufgabe sind Sie

@echo off 
for /f "tokens=3" %%a in ('reg query HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Authentication\LogonUI\SessionData\1 /v LoggedOnUserName') do (
set "user=%%a") 
set "user=%user:.\=%" 
echo/%user% 

Jetzt %user% Variable der angemeldete enthält den Benutzernamen von Windows-Registrierung erhalten können Nutzername.

+1

Ja, aber dies wird AdminUser zurückgeben, da er geplante Aufgaben ausführt. Auch wenn Sie in Windows als TestUser angemeldet sind.Ich probiere das, auch whoami command :) – dEVIANT

+0

Meine Schuld, check edit antwort! – Rafael

+1

Dies funktioniert nicht, wenn Benutzer mit getrennten Sitzungen vorhanden sind. Wenn DEVIANT dieses Szenario jedoch beherrschen kann, ist es viel weniger verrückt als meine Idee. – Syberdoor

0

Hier ist ein kurzer Weg, um dies möglich zu machen eine Batch-Datei wäre dieser Befehl:.

for /F "tokens=1,2" %%i in ('qwinsta /server:%COMPUTERNAME% ^| findstr "console"') do set tempVar=%%j 

echo %tempVar% wird zeigen, was Benutzer tatsächlich angemeldet ist nicht der Benutzer, der die Batch-Datei gestartet.

Verwandte Themen