Saat menjalankan skrip baris perintah, apakah mungkin untuk mendapatkan nama pengguna saat ini?
Saat menjalankan skrip baris perintah, apakah mungkin untuk mendapatkan nama pengguna saat ini?
Jawaban:
Nama pengguna:
echo %USERNAME%
Nama domain:
echo %USERDOMAIN%
Anda bisa mendapatkan daftar variabel lingkungan lengkap dengan menjalankan perintah set
dari prompt perintah.
Cukup gunakan perintah ini di command prompt
C:\> whoami
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.
Itu harus di %USERNAME%
. Jelas ini dapat dengan mudah dipalsukan, jadi jangan mengandalkan itu untuk keamanan.
Kiat bermanfaat: ketik set
prompt perintah akan mencantumkan semua variabel lingkungan.
Jawabannya tergantung pada bahasa "command-line script" Anda.
Di cmd.exe
prompt perintah lama atau dalam skrip .bat
atau .cmd
, Anda dapat menggunakan yang berikut ini:
%USERNAME%
- Hanya mendapatkan nama pengguna.
%USERDOMAIN%
- Mendapat domain pengguna.
Di prompt perintah PowerShell .ps1
atau .psm1
skrip, 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 $Env
variabel lain di bawah ini.
$Env:Username
- Hanya mendapatkan nama pengguna.
$Env:UserDomain
- Mendapat domain pengguna.
$Env:ComputerName
- Mendapat nama komputer.
% 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
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.
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.
net config Workstation | find "User name"
whoami
tersedia mulai dengan Windows Vista.
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
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)
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 ">"].
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