Ist es beim Ausführen eines Befehlszeilenskripts möglich, den Namen des aktuellen Benutzers abzurufen?
windows
batch-file
Geo
quelle
quelle
Antworten:
Sie können die Benutzername-Variable verwenden:
%USERNAME%
quelle
Nutzername:
Domainname:
Sie können eine vollständige Liste der Umgebungsvariablen abrufen, indem Sie den Befehl
set
an der Eingabeaufforderung ausführen.quelle
Verwenden Sie einfach diesen Befehl in der Eingabeaufforderung
quelle
whoami
, bekomme ichdesktop-machine\bballdave025
. Es gibt zwei Teile, gesehen über: 1)echo %USERNAME%
, Ergebnisbballdave025
; 2)echo %USERDOMAIN%
, ErgebnisDESKTOP-MACHINE
. Ich denke, man könnte sagen, dass der 'vollständige Benutzername' überecho %USERDOMAIN%\%USERNAME%
(dieses ErgebnisDESKTOP-MACHINE\bballdave025
entspricht dem vonwhoami
, Groß- und Kleinschreibung ignorieren) oder sogar überecho %USERNAME%@%USERDOMAIN%
Ergebnis verfügbar istbballdave025@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.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
set
eine Eingabeaufforderung eingeben, werden alle Umgebungsvariablen aufgelistet.quelle
%USERNAME%
ist die richtige Antwort im Batch und anderen in Windows-Umgebungen.Eine andere Option besteht darin
%USERPROFILE%
, den Pfad des Benutzers abzurufen, zC:\Users\username
.quelle
Die Antwort hängt davon ab, in welcher "Befehlszeilenskript" -Sprache 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 Domain des Benutzers ab.Power Shell
In der PowerShell-Eingabeaufforderung oder 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. Domain \ Benutzername). Dies ist auch die sicherste Methode, da sie vom Benutzer nicht wie die anderen folgenden$Env
Variablen ü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.quelle
% 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:
quelle
Ich benutze diese Methode beim Schreiben von Batch-Dateien zum Testen.
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.
quelle
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:
Und verwenden Sie das einfach in Ihrer Batch-Datei.
quelle
net config Workstation | find "User name"
whoami
ist ab Windows Vista verfügbar.In den meisten Fällen entspricht die Variable% USERNAME% Ihren Wünschen.
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:
quelle
Dies ist der Hauptunterschied zwischen der Benutzernamenvariablen und dem whoami-Befehl:
quelle
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.
quelle
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 ..
quelle