Come si trova l'utente corrente in un ambiente Windows?


159

Quando si esegue uno script da riga di comando, è possibile ottenere il nome dell'utente corrente?



@PeterMortensen, non penso che il thread sia super correlato a questo. Uno riguarda l'utilizzo di .NET e un altro riguarda l'utilizzo dell'API cmd . Oltre al fatto che entrambi vogliono le stesse informazioni, ci sono certamente tonnellate di altre API che fanno anche una cosa simile
KyleMit

Risposte:


202

Puoi usare la variabile username: %USERNAME%


91

Nome utente:

echo %USERNAME%

Nome del dominio:

echo %USERDOMAIN%

È possibile ottenere un elenco completo di variabili di ambiente eseguendo il comando setdal prompt dei comandi.


Le informazioni extra con tutte le variabili di ambiente rendono questa una risposta estesa meravigliosa.
bballdave025

63

Basta usare questo comando nel prompt dei comandi

C:\> whoami

Questa è una buona risposta, ma ci sono alcuni avvertimenti. Se entro whoami, ottengo desktop-machine\bballdave025. Ci sono due parti, viste tramite: 1) echo %USERNAME%, risultato bballdave025; 2) echo %USERDOMAIN%, risultato DESKTOP-MACHINE. Suppongo che si possa dire che il 'nome utente completo' è disponibile tramite echo %USERDOMAIN%\%USERNAME%(questo risultato DESKTOP-MACHINE\bballdave025, corrisponde a quello di whoami, ignorando il caso), o anche tramite echo %USERNAME%@%USERDOMAIN%, risultato bballdave025@DESKTOP-MACHINE. Tutto dipende da ciò di cui l'utente (per noi, l'OP) ha bisogno , ovvero se la parte del dominio è importante.
bballdave025

46

Dovrebbe essere dentro %USERNAME%. Ovviamente questo può essere facilmente falsificato, quindi non fare affidamento su di esso per la sicurezza.

Suggerimento utile: digitare setun prompt dei comandi elencherà tutte le variabili di ambiente.


2
La tua 'net config Workstation | trova molto utile il commento "Nome utente". Avrebbe dovuto essere una risposta piuttosto che un semplice commento
Alpay,

17

%USERNAME% è la risposta corretta in batch e altro in ambienti Windows.

Un'altra opzione è utilizzare %USERPROFILE%per ottenere il percorso dell'utente, come C:\Users\username.


6

La risposta dipende dalla lingua dello "script della riga di comando" in cui ci si trova.

cmd

Nel vecchio cmd.exeprompt dei comandi o in uno script .bato .cmd, è possibile utilizzare quanto segue:

%USERNAME% - Ottiene solo il nome utente.

%USERDOMAIN% - Ottiene il dominio dell'utente.

PowerShell

Nel comando PowerShell richiesta o una .ps1o .psm1script, è possibile utilizzare il seguente:

[System.Security.Principal.WindowsIdentity]::GetCurrent().Name- Ti dà il nome utente completo (ad esempio Dominio \ Nome utente). Questo è anche il metodo più sicuro perché non può essere ignorato dall'utente come le altre $Envvariabili seguenti.

$Env:Username - Ottiene solo il nome utente.

$Env:UserDomain - Ottiene il dominio dell'utente.

$Env:ComputerName - Ottiene il nome del computer.


Questa è un'ottima risposta in quanto questa domanda dipende dalla "shell". Esistono molte shell che puoi usare con Windows. Non solo CMD. In questi giorni la maggior parte della gente si è trasferita su PowerShell e ce ne sono altri là fuori. stackoverflow.com/questions/17349022/...
G_Style

5

% USERNAME% ti darà il nome utente del processo attualmente in esecuzione. A seconda di come si esegue il file batch, questo non è necessariamente lo stesso del nome dell'utente corrente. Ad esempio, potresti eseguire il tuo file batch attraverso un'attività pianificata, da un servizio, ecc.

Ecco un modo più sicuro per ottenere il nome utente dell'utente attualmente connesso raschiando il nome dell'utente che ha avviato l'attività explorer.exe:

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

4

Uso questo metodo per scrivere file batch per i test.

echo %userdomain%\%username%

Poiché è necessario includere la password in testo semplice se è richiesta l'autenticazione, la userò solo in un ambiente completamente privato in cui altri utenti non possono visualizzarla o se un utente che vede la password non avrebbe conseguenze.

Spero che questo aiuti qualcuno.


4

Mi ha sempre infastidito il fatto che Windows non abbia alcune delle piccole utili utility di scripting di Unix, come who / whoami , sed e AWK . Ad ogni modo, se vuoi qualcosa di infallibile, ottieni Visual Studio Express e compila quanto segue:

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

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

E basta usarlo nel file batch.


Sì, sarebbe stato bello avere un built-in.
Geo,

8
Sono d'accordo che sed & awk sarebbe utile, ma questo ti fa ottenere il 50% del modo in cui: net config Workstation | find "User name"
the_mandrill

9
whoamiè disponibile a partire da Windows Vista.
Joey

2
È vero, l'utilità whoami è inclusa con Vista. Per XP, è negli strumenti di supporto SP2 e per W2K, è nel toolkit delle risorse.
RealHowTo

4

Nella maggior parte dei casi, la variabile% USERNAME% sarà quella che desideri.

echo %USERNAME%

Tuttavia, se stai eseguendo una shell cmd elevata,% USERNAME% riporterà il nome dell'amministratore invece del tuo nome utente. Se vuoi conoscere quest'ultimo, esegui:

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

1

Questa è la principale differenza tra la variabile username e il comando whoami:

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

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

DOMAIN = bios name of the domain (not fqdn)

0

In un contesto standard, ogni utente connesso possiede un processo explorer.exe: il comando [tasklist / V | find "explorer"] restituisce una riga che contiene il proprietario del processo explorer.exe, con un regex adattato è possibile ottenere il necessario valore. Questo funziona perfettamente anche con Windows 7.

In rari casi explorer.exe è sostituito da un altro programma, il filtro find può essere adattato per corrispondere a questo caso. Se il comando restituisce una riga vuota, è probabile che nessun utente sia connesso. Con Windows 7 è anche possibile eseguire [sessione di query | trova ">"].


0

Per quanto riguarda trovare la risposta di BlueBearr al meglio (mentre io sto eseguendo il mio script batch con ad es. I diritti di SISTEMA) devo aggiungere qualcosa ad esso. Perché nella mia versione in lingua di Windows (polacco) la riga che deve essere catturata da "%% a %% b" == "Nome utente:" viene REALMENTE COMPLICATA (contiene alcuni caratteri diacritici nella mia lingua) Salto le prime 7 righe e operare l'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
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.