Bagaimana Anda menemukan pengguna saat ini di lingkungan Windows?


159

Saat menjalankan skrip baris perintah, apakah mungkin untuk mendapatkan nama pengguna saat ini?



@PeterMortensen, saya tidak berpikir utas itu sangat terkait dengan yang ini. Salah satunya adalah tentang menggunakan .NET dan yang lainnya adalah tentang menggunakan cmd API. Selain fakta bahwa mereka berdua menginginkan info yang sama, pasti ada banyak API lain yang juga melakukan hal serupa
KyleMit

Jawaban:


202

Anda dapat menggunakan variabel nama pengguna: %USERNAME%


91

Nama pengguna:

echo %USERNAME%

Nama domain:

echo %USERDOMAIN%

Anda bisa mendapatkan daftar variabel lingkungan lengkap dengan menjalankan perintah setdari prompt perintah.


Informasi tambahan dengan semua variabel lingkungan menjadikan ini jawaban yang diperluas.
bballdave025

63

Cukup gunakan perintah ini di command prompt

C:\> whoami

Ini adalah jawaban yang bagus, tetapi ada beberapa peringatan. Jika saya masuk whoami, saya mengerti desktop-machine\bballdave025. Ada dua bagian, dilihat melalui: 1) echo %USERNAME%, hasil bballdave025; 2) echo %USERDOMAIN%, hasilnya DESKTOP-MACHINE. Saya kira orang bisa mengatakan 'username lengkap' tersedia melalui echo %USERDOMAIN%\%USERNAME%(hasil ini DESKTOP-MACHINE\bballdave025,, cocok dengan yang dari whoami, mengabaikan kasus), atau bahkan melalui echo %USERNAME%@%USERDOMAIN%, hasil bballdave025@DESKTOP-MACHINE. Itu semua tergantung pada apa yang pengguna (bagi kami, OP) butuhkan , yaitu jika bagian domain menjadi penting.
bballdave025

46

Itu harus di %USERNAME%. Jelas ini dapat dengan mudah dipalsukan, jadi jangan mengandalkan itu untuk keamanan.

Kiat bermanfaat: ketik setprompt perintah akan mencantumkan semua variabel lingkungan.


2
Workstation konfigurasi net Anda | temukan komentar "Nama pengguna" sangat berguna. Itu seharusnya menjadi jawaban dan bukan hanya komentar
Alpay

17

%USERNAME% adalah jawaban yang benar dalam batch dan lainnya di lingkungan Windows.

Opsi lain adalah menggunakan %USERPROFILE%untuk mendapatkan jalur pengguna, seperti C:\Users\username.


6

Jawabannya tergantung pada bahasa "command-line script" Anda.

Cmd

Di cmd.exeprompt perintah lama atau dalam skrip .batatau .cmd, Anda dapat menggunakan yang berikut ini:

%USERNAME% - Hanya mendapatkan nama pengguna.

%USERDOMAIN% - Mendapat domain pengguna.

PowerShell

Di prompt perintah PowerShell .ps1atau .psm1skrip, Anda dapat menggunakan yang berikut ini:

[System.Security.Principal.WindowsIdentity]::GetCurrent().Name- Memberi Anda nama pengguna yang sepenuhnya memenuhi syarat (mis. Domain \ Nama Pengguna). Ini juga merupakan metode yang paling aman karena tidak dapat ditimpa oleh pengguna seperti $Envvariabel lain di bawah ini.

$Env:Username - Hanya mendapatkan nama pengguna.

$Env:UserDomain - Mendapat domain pengguna.

$Env:ComputerName - Mendapat nama komputer.


Ini adalah jawaban yang bagus karena pertanyaan ini bergantung pada 'shell'. Ada banyak cangkang yang dapat Anda gunakan dengan Windows. Bukan hanya CMD. Hari-hari ini kebanyakan orang telah pindah ke PowerShell dan ada orang lain di luar sana. stackoverflow.com/questions/17349022/…
G_Style

5

% USERNAME% akan memberi Anda nama pengguna dari proses yang sedang berjalan. Bergantung pada bagaimana Anda menjalankan file batch Anda, ini belum tentu sama dengan nama pengguna saat ini. Misalnya, Anda mungkin menjalankan file batch Anda melalui tugas yang dijadwalkan, dari layanan, dll.

Berikut adalah cara yang lebih pasti untuk mendapatkan nama pengguna dari pengguna yang saat ini masuk dengan menggoreskan nama pengguna yang memulai tugas 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

Saya menggunakan metode ini dalam menulis file batch untuk pengujian.

echo %userdomain%\%username%

Karena Anda harus memasukkan kata sandi dalam teks biasa jika otentikasi diperlukan, saya hanya akan menggunakannya dalam lingkungan yang sepenuhnya pribadi di mana pengguna lain tidak dapat melihatnya atau jika pengguna yang melihat kata sandi tidak akan menanggung konsekuensi.

Semoga ini bisa membantu seseorang.


4

Itu selalu mengganggu saya bagaimana Windows tidak memiliki beberapa utilitas scripting kecil yang lebih berguna dari Unix, seperti who / whoami , sed dan AWK . Bagaimanapun, jika Anda menginginkan sesuatu yang sangat mudah, dapatkan Visual Studio Express dan kompilasi yang berikut:

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

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

Dan cukup gunakan itu dalam file batch Anda.


Ya, pasti menyenangkan memiliki built-in.
Geo

8
Saya setuju bahwa sed & awk akan berguna, tetapi ini membuat Anda 50% dari perjalanan ke sana: net config Workstation | find "User name"
the_mandrill

9
whoamitersedia mulai dengan Windows Vista.
Joey

2
Benar, utilitas whoami disertakan dengan Vista. Untuk XP, ada di alat Dukungan SP2 dan untuk W2K, ada di Resource toolkit.
RealHowTo

4

Dalam kebanyakan kasus, variabel% USERNAME% akan menjadi apa yang Anda inginkan.

echo %USERNAME%

Namun, jika Anda menjalankan shell cmd yang ditinggikan, maka% USERNAME% akan melaporkan nama administrator alih-alih nama pengguna Anda sendiri. Jika Anda ingin mengetahui yang terakhir, jalankan:

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

1

Ini adalah perbedaan utama antara variabel nama pengguna dan perintah 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

Dalam konteks standar, setiap pengguna yang terhubung memegang proses explorer.exe: Perintah [tasklist / V | find "explorer"] mengembalikan baris yang berisi pemilik proses explorer.exe, dengan regex yang diadaptasi dimungkinkan untuk mendapatkan yang diperlukan nilai. Ini juga berjalan dengan sempurna di bawah Windows 7.

Dalam kasus yang jarang terjadi explorer.exe digantikan oleh program lain, filter find dapat disesuaikan untuk mencocokkan kasus ini. Jika perintah mengembalikan baris kosong maka kemungkinan tidak ada pengguna yang masuk. Dengan Windows 7, Anda juga dapat menjalankan [sesi kueri | temukan ">"].


0

Sejauh menemukan respon BlueBearr yang terbaik (sementara saya, saya menjalankan skrip batch saya dengan misalnya. SISTEM hak) saya harus menambahkan sesuatu untuk itu. Karena di baris versi bahasa Windows (Polandia) saya yang akan ditangkap oleh "%% a %% b" == "Nama Pengguna:" benar-benar KOMPLIKASI (berisi beberapa karakter diakritik dalam bahasa saya), saya lewati 7 baris pertama dan beroperasi pada tanggal 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
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.