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

159

Ist es beim Ausführen eines Befehlszeilenskripts möglich, den Namen des aktuellen Benutzers abzurufen?

Geo
quelle
@PeterMortensen, ich denke nicht, dass der Thread super mit diesem verwandt ist. In einem geht es um die Verwendung von .NET und in einem anderen um die Verwendung der cmd- API.
Abgesehen von

Antworten:

202

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

JRL
quelle
90

Nutzername:

echo %USERNAME%

Domainname:

echo %USERDOMAIN%

Sie können eine vollständige Liste der Umgebungsvariablen abrufen, indem Sie den Befehl setan der Eingabeaufforderung ausführen.

Magnus Lindhe
quelle
Die zusätzlichen Informationen mit allen Umgebungsvariablen machen dies zu einer wunderbaren erweiterten Antwort.
bballdave025
63

Verwenden Sie einfach diesen Befehl in der Eingabeaufforderung

C:\> whoami
Freeman
quelle
Dies ist eine gute Antwort, aber es gibt einige Einschränkungen. Wenn ich eintrete whoami, bekomme ich desktop-machine\bballdave025. Es gibt zwei Teile, gesehen über: 1) echo %USERNAME%, Ergebnis bballdave025; 2) echo %USERDOMAIN%, Ergebnis DESKTOP-MACHINE. Ich denke, man könnte sagen, dass der 'vollständige Benutzername' über echo %USERDOMAIN%\%USERNAME%(dieses Ergebnis DESKTOP-MACHINE\bballdave025entspricht dem von whoami, Groß- und Kleinschreibung ignorieren) oder sogar über echo %USERNAME%@%USERDOMAIN%Ergebnis verfügbar ist bballdave025@DESKTOP-MACHINE. Es hängt alles davon ab, was der Benutzer (für uns das OP) benötigt , dh ob der Domain-Teil wichtig ist.
bballdave025
46

Es sollte in sein %USERNAME%. Offensichtlich kann dies leicht gefälscht werden, verlassen Sie sich also aus Sicherheitsgründen nicht darauf.

Nützlicher Tipp: Wenn Sie seteine Eingabeaufforderung eingeben, werden alle Umgebungsvariablen aufgelistet.

the_mandrill
quelle
2
Ihre 'net config Workstation | find "Benutzername" 'Kommentar ist sehr nützlich. Es sollte eher eine Antwort als nur ein Kommentar sein
Alpay
17

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

Eine andere Option besteht darin %USERPROFILE%, den Pfad des Benutzers abzurufen, z C:\Users\username.

Aufklärung
quelle
6

Die Antwort hängt davon ab, in welcher "Befehlszeilenskript" -Sprache Sie sich befinden.

Cmd

In der alten cmd.exeEingabeaufforderung oder in einem .batoder .cmdSkript können Sie Folgendes verwenden:

%USERNAME% - Ruft nur den Benutzernamen ab.

%USERDOMAIN% - Ruft die Domain des Benutzers ab.

Power Shell

In der PowerShell-Eingabeaufforderung oder einem .ps1oder .psm1Skript können Sie Folgendes verwenden:

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

$Env:Username - Ruft nur den Benutzernamen ab.

$Env:UserDomain - Ruft die Domain des Benutzers ab.

$Env:ComputerName - Ruft den Namen des Computers ab.

tödlicher Hund
quelle
Dies ist eine großartige Antwort, da diese Frage von der Shell abhängt. Es gibt viele Shells, die Sie mit Windows verwenden können. Nicht nur CMD. In diesen Tagen sind die meisten Leute zu Powershell gezogen und es gibt andere da draußen. stackoverflow.com/questions/17349022/…
G_Style
5

% USERNAME% gibt Ihnen den Benutzernamen des aktuell ausgeführten Prozesses. Abhängig davon, wie Sie Ihre Batchdatei ausführen, entspricht dies nicht unbedingt dem Namen des aktuellen Benutzers. Beispielsweise können Sie Ihre Batchdatei über eine geplante Aufgabe, einen Dienst usw. ausführen.

Hier ist eine sicherere Methode, um den Benutzernamen des aktuell angemeldeten Benutzers zu ermitteln, indem Sie den Namen des Benutzers löschen, der die Aufgabe 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
BlueBearr
quelle
4

Ich benutze diese Methode beim Schreiben von Batch-Dateien zum Testen.

echo %userdomain%\%username%

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

Hoffe das hilft jemandem.

Chad Harrington Mitchell
quelle
4

Es hat mich immer geärgert, dass Windows einige der nützlicheren kleinen Skript-Dienstprogramme von Unix nicht hat, wie who / whoami , sed und AWK . Wenn Sie etwas kinderleichtes möchten, 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 Batch-Datei.

Chris K.
quelle
Ja, es wäre schön gewesen, ein eingebautes zu haben.
Geo
8
Ich bin damit einverstanden, dass sed & awk nützlich wäre, aber dies bringt Sie zu 50% dorthin: net config Workstation | find "User name"
the_mandrill
9
whoamiist ab Windows Vista verfügbar.
Joey
2
Das Whoami-Dienstprogramm ist in Vista enthalten. Für XP ist es in den SP2-Support-Tools und für W2K im Resource Toolkit enthalten.
RealHowTo
4

In den meisten Fällen entspricht die Variable% USERNAME% Ihren Wünschen.

echo %USERNAME%

Wenn Sie jedoch eine erhöhte Cmd-Shell ausführen, gibt% USERNAME% den Administratornamen anstelle Ihres eigenen Benutzernamens an. Wenn Sie Letzteres wissen möchten, führen Sie Folgendes aus:

for /f "tokens=2" %u in ('query session ^| findstr /R "^>"') do @echo %u
Jean-François Larvoire
quelle
1

Dies ist der Hauptunterschied zwischen der Benutzernamenvariablen und dem whoami-Befehl:

C:\Users\user.name>echo %username%
user.name

C:\Users\user.name>whoami
domain\user.name

DOMAIN = bios name of the domain (not fqdn)
integratorIT
quelle
0

In einem Standardkontext enthält jeder verbundene Benutzer einen explorer.exe-Prozess: Der Befehl [tasklist / V | find "explorer"] gibt eine Zeile zurück, die die Eigentümer des explorer.exe-Prozesses enthält. Mit einem angepassten regulären Ausdruck kann der erforderliche Prozess abgerufen werden Wert. Dies läuft auch perfekt 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, [Abfragesitzung | find ">"] auszuführen.

Armand Poulenard
quelle
0

Um die BlueBearr-Antwort am besten zu finden (während ich mein Batch-Skript mit z. B. SYSTEM-Rechten ausführe), muss ich etwas hinzufügen. Da in meiner Windows-Sprachversion (polnisch), die von "%% a %% b" abgefangen werden soll, == "Benutzername:" WIRKLICH KOMPLIZIERT wird (es enthält einige diakritische Zeichen in meiner Sprache), überspringe ich die ersten 7 Zeilen und operieren 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
ITMarka
quelle