Geçerli kullanıcıyı Windows ortamında nasıl buluyorsunuz?


159

Bir komut satırı komut dosyası çalıştırırken, geçerli kullanıcının adını almak mümkün müdür?



1
@PeterMortensen, iş parçacığının bununla süper ilişkili olduğunu düşünmüyorum. Biri .NET'i , diğeri cmd API'sini kullanmakla ilgilidir. Her ikisinin de aynı bilgiyi istemesi dışında, kesinlikle benzer bir şey yapan tonlarca başka API vardır
KyleMit

Yanıtlar:


202

Kullanıcı adı değişkenini kullanabilirsiniz: %USERNAME%


91

Kullanıcı adı:

echo %USERNAME%

Alan adı:

echo %USERDOMAIN%

setKomut isteminden komutu çalıştırarak ortam değişkenlerinin tam listesini alabilirsiniz .


Tüm ortam değişkenleri ile ilgili ek bilgi, bu harika bir genişletilmiş cevap yapar.
bballdave025

63

Komut isteminde bu komutu kullanın

C:\> whoami

Bu iyi bir cevap, ancak bazı uyarılar var. Eğer girersem whoami, anlarım desktop-machine\bballdave025. İki bölüm vardır: 1) echo %USERNAME%, sonuç bballdave025; 2) echo %USERDOMAIN%, sonuç DESKTOP-MACHINE. Bir 'tam adı' üzerinden ulaşılabilir söyleyebiliriz sanırım echo %USERDOMAIN%\%USERNAME%(bu sonucu, DESKTOP-MACHINE\bballdave025bu maçları whoamigörmezden durumda,), hatta yoluyla echo %USERNAME%@%USERDOMAIN%, sonuç bballdave025@DESKTOP-MACHINE. Her şey kullanıcının (bizim için OP) neye ihtiyaç duyduğuna , yani etki alanı kısmının önemli olup olmadığına bağlıdır.
bballdave025

46

İçinde olmalı %USERNAME%. Açıkçası bu kolayca taklit edilebilir, bu yüzden güvenlik için ona güvenmeyin.

Yararlı ipucu: setbir komut istemi yazın tüm ortam değişkenlerini listeler.


2
'Net config İş İstasyonunuz | "Kullanıcı adı" ifadesini bul çok yararlıdır. Bu sadece bir yorumdan ziyade bir cevap olmalı
Alpay

17

%USERNAME% toplu işlerde ve diğer Windows ortamlarında doğru yanıttır.

Başka bir seçenek, %USERPROFILE%kullanıcının yolunu almak için kullanmaktır C:\Users\username.


6

Yanıt, hangi "komut satırı komut dosyası" dilinin bulunduğuna bağlıdır.

Cmd

Eski cmd.exekomut isteminde veya bir .batveya .cmdkomut dosyasında aşağıdakileri kullanabilirsiniz:

%USERNAME% - Sadece kullanıcı adını alır.

%USERDOMAIN% - Kullanıcının alan adını alır.

Güç kalkanı

PowerShell komut isteminde veya bir .ps1veya .psm1komut dosyasında aşağıdakileri kullanabilirsiniz:

[System.Security.Principal.WindowsIdentity]::GetCurrent().Name- Size tam nitelikli kullanıcı adı verir (ör. EtkiAlanı \ Kullanıcı Adı). Bu aynı zamanda en güvenli yöntemdir, çünkü $Envaşağıdaki diğer değişkenler gibi kullanıcı tarafından geçersiz kılınamaz .

$Env:Username - Sadece kullanıcı adını alır.

$Env:UserDomain - Kullanıcının alan adını alır.

$Env:ComputerName - Bilgisayarın adını alır.


Bu soru 'kabuk' bağımlı olduğundan bu harika bir cevaptır. Windows ile kullanabileceğiniz birçok kabuk vardır. Sadece CMD değil. Bugünlerde çoğu insan powershell'e taşındı ve orada başkaları da var. stackoverflow.com/questions/17349022/…
G_Style

5

% USERNAME% şu anda çalışan işlemin kullanıcı adını alacak. Toplu iş dosyanızı nasıl çalıştırdığınıza bağlı olarak, bu geçerli kullanıcının adıyla aynı olmayabilir. Örneğin, toplu iş dosyanızı zamanlanmış bir görevden, bir hizmetten vb. Çalıştırıyor olabilirsiniz.

İşte explorer.exe görevini başlatan kullanıcının adını kazıyarak, şu anda oturum açmış olan kullanıcının kullanıcı adını almanın daha kesin bir yolu:

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

Bu yöntemi test için toplu iş dosyaları yazarken kullanıyorum.

echo %userdomain%\%username%

Kimlik doğrulaması gerekiyorsa, parolayı düz metin olarak eklemeniz gerektiğinden, yalnızca diğer kullanıcıların görüntüleyemediği veya parolayı gören bir kullanıcının sonuç vermeyeceği tamamen özel bir ortamda kullanacağım.

Umarım bu birisine yardım eder.


4

Windows'un kim / whoami , sed ve AWK gibi Unix'in daha kullanışlı küçük komut dosyası yardımcı programlarına sahip olmadığı her zaman beni rahatsız ediyor . Her neyse, kusursuz bir şey istiyorsanız, Visual Studio Express'i alın ve aşağıdakileri derleyin:

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

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

Ve bunu toplu iş dosyanızda kullanın.


Evet, yerleşik bir tane olması güzel olurdu.
Geo

8
Ben sed & awk yararlı olacağını kabul ediyorum, ama bu orada yol% 50 alır: net config Workstation | find "User name"
the_mandrill

9
whoamiWindows Vista'dan başlayarak kullanılabilir.
Joey

2
Doğru, whoami yardımcı programı Vista'ya dahildir. XP için SP2 Destek araçlarında ve W2K için Kaynak araç takımındadır.
RealHowTo

4

Çoğu durumda,% USERNAME% değişkeni istediğiniz gibi olacaktır.

echo %USERNAME%

Ancak, yükseltilmiş bir cmd kabuğu çalıştırıyorsanız,% USERNAME% kendi kullanıcı adınız yerine yönetici adını bildirir. İkincisini bilmek istiyorsanız, çalıştırın:

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

1

Bu kullanıcı adı değişkeni ve whoami komutu arasındaki temel farktır:

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

Standart bir bağlamda, bağlı her kullanıcı bir explorer.exe işlemi tutar: [tasklist / V | find "explorer"] komutu, explorer.exe işlem sahibini içeren bir satır döndürür, uyarlanmış bir regex ile gerekli olanı elde etmek mümkündür değer. Bu, Windows 7 altında da mükemmel çalışır.

Nadir durumlarda explorer.exe başka bir programla değiştirilir, bulma filtresi bu duruma uyacak şekilde uyarlanabilir. Komut boş bir satır döndürürse, hiçbir kullanıcının oturum açmamış olması muhtemeldir. Windows 7 ile [query session | find ">"] çalıştırmak da mümkündür.


0

Bildiğim kadarıyla BlueBearr yanıtı bulmak en iyi (m, örneğin toplu komut dosyası örneğin SYSTEM hakları ile çalışan) ben buna bir şey eklemek zorunda. "%% a %% b" == "Kullanıcı Adı:" tarafından yakalanacak olan Windows dil sürümü (Lehçe) satırımda GERÇEKTEN TAMAMLANDI (benim dilimde bazı aksan karakterleri içeriyor) İlk 7 satırı atladım ve 8 üzerinde çalışır.

@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
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.