it-swarm.com.de

Wie finden Sie den aktuellen Benutzer in einer Windows-Umgebung?

Kann bei der Ausführung eines Befehlszeilenskripts der Name des aktuellen Benutzers abgerufen werden? Das Betriebssystem ist Windows XP.

135
Geo

Sie können die Benutzername-Variable verwenden: %USERNAME%

177
JRL

Nutzername:

echo %USERNAME%

Domainname:

echo %USERDOMAIN%

Sie erhalten eine vollständige Liste der Umgebungsvariablen, indem Sie den Befehl set von der Eingabeaufforderung aus ausführen.

76
Magnus Lindhe

Verwenden Sie diesen Befehl einfach in der Eingabeaufforderung

C:\> whoami
51
Freeman

Es sollte in %USERNAME% sein. Natürlich kann dies leicht gefälscht werden. Verlassen Sie sich daher nicht auf die Sicherheit. 

Nützlicher Tipp: Geben Sie set in eine Eingabeaufforderung ein, um alle Umgebungsvariablen aufzulisten.

44
the_mandrill

%USERNAME%ist die richtige Antwort in Batch und anderen in Windows-Umgebungen.

Eine andere Option ist die Verwendung von%USERPROFILE%, um den Pfad des Benutzers abzurufen, wie C:\Users\username.

14
Recon

Es ärgert mich immer wieder, dass es in Windows keine nützlichen kleinen Hilfsprogramme für die Skripterstellung von Unix gibt, z. B. who / whoami , sed und AWK . Wenn Sie etwas Tollsicheres wollen, holen Sie sich Visual Studio Express und kompilieren Sie Folgendes:

#include <windows.h>
#include <stdio.h>

int main(int argc, char **argv) {
    printf("%s", GetUserName());
}

Und verwenden Sie das einfach in Ihrer Batchdatei.

4
Chris K

Mit% USERNAME% erhalten Sie den Benutzernamen des aktuell laufenden Prozesses. Je nachdem, wie Sie Ihre Batchdatei ausführen, stimmt diese nicht unbedingt mit dem Namen des aktuellen Benutzers überein. Beispielsweise können Sie Ihre Stapeldatei über eine geplante Aufgabe, einen Dienst usw. ausführen.

Eine sicherere Methode zum Abrufen des Benutzernamens des aktuell angemeldeten Benutzers durch Verschrotten des Namens des Benutzers, der die Task Explorer.exe gestartet hat:

for /f "TOKENS=1,2,*" %%a in ('tasklist /FI "IMAGENAME eq Explorer.exe" /FO LIST /V') do if /i "%%a %%b"=="User Name:" set _currdomain_user=%%c
for /f "TOKENS=1,2 DELIMS=\" %%a in ("%_currdomain_user%") do set _currdomain=%%a & set _curruser=%%b
3
BlueBearr

Ich verwende diese Methode beim Schreiben von Batchdateien zum Testen. 

echo %userdomain%\%username%

Da Sie das Kennwort im Klartext angeben müssen, wenn eine Authentifizierung erforderlich ist, verwende ich es nur in einer vollständig privaten Umgebung, in der andere Benutzer es nicht anzeigen können, oder wenn ein Benutzer, der das Kennwort sieht, keine Folgen hat. 

Hoffe, das hilft jemandem.

In den meisten Fällen entspricht die Variable% USERNAME% dem, was Sie möchten.

echo %USERNAME%

Wenn Sie jedoch eine Cmd-Shell mit erhöhten Rechten ausführen, meldet% USERNAME% den Administratornamen anstelle Ihres eigenen Benutzernamens. Wenn Sie das Letztere wissen möchten, führen Sie Folgendes aus:

for /f "tokens=2" %u in ('query session ^| findstr /R "^>"') do @echo %u

In einem Standardkontext besitzt jeder verbundene Benutzer einen Explorer.exe-Prozess: Der Befehl [tasklist/V | find "Explorer"] gibt eine Zeile zurück, die den Besitzer des Explorer.exe-Prozesses enthält. Mit einem angepassten Regex kann der erforderliche Wert ermittelt werden Wert. Dies läuft auch einwandfrei unter Windows 7.

In seltenen Fällen wird Explorer.exe durch ein anderes Programm ersetzt. Der Suchfilter kann an diesen Fall angepasst werden. Wenn der Befehl eine leere Zeile zurückgibt, ist wahrscheinlich kein Benutzer angemeldet. Unter Windows 7 ist es auch möglich, [query session | find ">"] auszuführen.

0

Die Antwort hängt davon ab, in welcher "Befehlszeilensprache" Sie sich befinden.

Cmd

In der alten cmd.exe-Eingabeaufforderung oder in einem .bat- oder .cmd-Skript können Sie Folgendes verwenden:

%USERNAME% - Ruft nur den Benutzernamen ab.

%USERDOMAIN% - Ruft die Domäne des Benutzers ab.

Power Shell

In der PowerShell-Eingabeaufforderung oder in einem .ps1- oder .psm1-Skript können Sie Folgendes verwenden:

[System.Security.Principal.WindowsIdentity]::GetCurrent().Name - Gibt Ihnen den vollständig qualifizierten Benutzernamen (z. B. Domäne\Benutzername). Dies ist auch die sicherste Methode, da sie vom Benutzer nicht wie die anderen $Env-Variablen unten überschrieben werden kann.

$Env:Username - Ruft nur den Benutzernamen ab.

$Env:UserDomain - Ruft die Domäne des Benutzers ab.

$Env:ComputerName - Liefert den Namen des Computers.

0
deadlydog

Um die BlueBearr-Antwort am besten zu finden (während ich mein Batch-Skript mit z. B. SYSTEM-Rechten laufe), muss ich etwas hinzufügen. Da in meiner Windows-Sprachversion (Polnisch) Zeile, die von "%% a %% b" == "User Name:" abgefangen werden soll, WIRKLICH KOMPLIZIERT wird (es enthält einige diakritische Zeichen in meiner Sprache), überspringe ich zuerst 7 Linien und fahren am 8..

@for /f "SKIP= 7 TOKENS=3,4 DELIMS=\ " %%G in ('tasklist /FI "IMAGENAME eq Explorer.exe" /FO LIST /V') do @IF %%G==%COMPUTERNAME% set _currdomain_user=%%H
0
ITMarka