एक विंडोज वातावरण में आप वर्तमान उपयोगकर्ता को कैसे खोजते हैं?


159

कमांड-लाइन स्क्रिप्ट चलाते समय, क्या वर्तमान उपयोगकर्ता का नाम प्राप्त करना संभव है?



@PeterMortensen, मुझे नहीं लगता कि यह धागा इस से संबंधित है। एक .NET का उपयोग करने के बारे में है और दूसरा cmd API का उपयोग करने के बारे में है। इस तथ्य के अलावा कि वे दोनों एक ही जानकारी चाहते हैं, निश्चित रूप से अन्य एपीआई के टन हैं जो एक समान काम भी करते हैं
काइलमिट

जवाबों:


202

आप उपयोगकर्ता नाम चर का उपयोग कर सकते हैं: %USERNAME%


90

उपयोगकर्ता नाम:

echo %USERNAME%

डोमेन नाम:

echo %USERDOMAIN%

setकमांड प्रॉम्प्ट से कमांड चलाकर आप पर्यावरण चर की पूरी सूची प्राप्त कर सकते हैं ।


सभी पर्यावरण चर के साथ अतिरिक्त जानकारी यह एक अद्भुत विस्तारित उत्तर बनाती है।
bballdave025

63

बस कमांड प्रॉम्प्ट में इस कमांड का उपयोग करें

C:\> whoami

यह एक अच्छा जवाब है, लेकिन कुछ चेतावनी भी हैं। अगर मैं प्रवेश करता हूं whoami, तो मुझे मिलता है desktop-machine\bballdave025। दो भाग हैं, जिन्हें देखा जाता है: 1) echo %USERNAME%, परिणाम bballdave025; 2) echo %USERDOMAIN%, परिणाम DESKTOP-MACHINE। मुझे लगता है कि कोई कह सकता है कि 'पूर्ण उपयोगकर्ता नाम' echo %USERDOMAIN%\%USERNAME%(इस परिणाम से DESKTOP-MACHINE\bballdave025, मैच की whoamiअनदेखी कर रहा है) या echo %USERNAME%@%USERDOMAIN%परिणाम के माध्यम से भी उपलब्ध है bballdave025@DESKTOP-MACHINEयह सब इस बात पर निर्भर करता है कि उपयोगकर्ता (हमारे लिए, ओपी) को क्या जरूरत है , अर्थात यदि डोमेन हिस्सा महत्वपूर्ण है।
bballdave025

46

इसमें होना चाहिए %USERNAME%। जाहिर है कि यह आसानी से खराब हो सकता है, इसलिए सुरक्षा के लिए इस पर भरोसा न करें।

उपयोगी टिप: setकमांड प्रॉम्प्ट में टाइप सभी पर्यावरण चर को सूचीबद्ध करेगा।


2
आपका 'शुद्ध विन्यास कार्य केंद्र | "उपयोगकर्ता नाम" खोजें टिप्पणी बहुत उपयोगी है। यह केवल एक टिप्पणी के बजाय एक उत्तर होना चाहिए था
अल्पे

17

%USERNAME% Windows वातावरण में बैच और अन्य में सही उत्तर है।

एक अन्य विकल्प %USERPROFILE%उपयोगकर्ता के मार्ग को प्राप्त करने के लिए उपयोग करना है, जैसे C:\Users\username


6

उत्तर इस बात पर निर्भर करता है कि आप किस "कमांड-लाइन स्क्रिप्ट" भाषा में हैं।

cmd

वर्ष में cmd.exeकमांड प्रॉम्प्ट या एक में .batया .cmdस्क्रिप्ट, आप निम्न का उपयोग कर सकते हैं:

%USERNAME% - बस उपयोगकर्ता नाम हो जाता है।

%USERDOMAIN% - उपयोगकर्ता के डोमेन हो जाता है।

शक्ति कोशिका

PowerShell आदेश में शीघ्र या एक .ps1या .psm1स्क्रिप्ट, आप निम्न का उपयोग कर सकते हैं:

[System.Security.Principal.WindowsIdentity]::GetCurrent().Name- आपको पूरी तरह से योग्य उपयोगकर्ता नाम (जैसे डोमेन \ उपयोगकर्ता नाम) देता है। यह भी सबसे सुरक्षित तरीका है क्योंकि यह $Envनीचे के अन्य चर की तरह उपयोगकर्ता द्वारा ओवरराइड नहीं किया जा सकता है ।

$Env:Username - बस उपयोगकर्ता नाम हो जाता है।

$Env:UserDomain - उपयोगकर्ता के डोमेन हो जाता है।

$Env:ComputerName - कंप्यूटर का नाम हो जाता है।


यह एक महान जवाब है क्योंकि यह प्रश्न 'शेल' पर निर्भर है। कई गोले हैं जो आप विंडोज के साथ उपयोग कर सकते हैं। सिर्फ सीएमडी नहीं। इन दिनों ज्यादातर लोग पावरशैल में चले गए हैं और वहां से बाहर हैं। stackoverflow.com/questions/17349022/…
G_Style

5

% USERNAME% आपको वर्तमान में चल रही प्रक्रिया का उपयोगकर्ता नाम प्राप्त करेगा। यह निर्भर करता है कि आप अपनी बैच फ़ाइल कैसे चला रहे हैं, यह वर्तमान उपयोगकर्ता के नाम के समान आवश्यक नहीं है। उदाहरण के लिए, आप अपनी बैच फ़ाइल को किसी निर्धारित कार्य से, किसी सेवा आदि से चला रहे होंगे।

यहां उस उपयोगकर्ता का नाम स्क्रैप करके उपयोगकर्ता के नाम पर वर्तमान में लॉग इन करने का एक निश्चित तरीका है, जिसने एक्स्प्लोरर शुरू किया है।

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

मैं परीक्षण के लिए बैच फ़ाइलों को लिखने में इस पद्धति का उपयोग करता हूं।

echo %userdomain%\%username%

चूँकि प्रमाणीकरण की आवश्यकता होने पर आप पासवर्ड को सादे पाठ में शामिल करते हैं, मैं इसका उपयोग पूरी तरह से निजी वातावरण में करूँगा जहाँ अन्य उपयोगकर्ता इसे नहीं देख सकते हैं या यदि पासवर्ड देखने वाला उपयोगकर्ता कोई परिणाम नहीं देगा।

आशा है कि यह किसी को बाहर करने में मदद करता है।


4

यह हमेशा मुझे नाराज है कैसे विंडोज जैसे यूनिक्स के और अधिक उपयोगी थोड़ा पटकथा उपयोगिताओं, में से कुछ भी नहीं है जो / Whoami , sed और AWK । वैसे भी, यदि आप कुछ मूर्ख बनाना चाहते हैं, तो Visual Studio Express प्राप्त करें और निम्नलिखित संकलन करें:

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

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

और बस अपने बैच फ़ाइल में उपयोग करें।


हाँ, बिल्ट-इन होना अच्छा होता।
जियो

8
मैं मानता हूं कि sed और awk उपयोगी होंगे, लेकिन इससे आपको 50% वहां मिल जाएगा: net config Workstation | find "User name"
the_mandrill

9
whoamiविंडोज विस्टा के साथ शुरू उपलब्ध है।
जॉय

2
सच है, विमा उपयोगिता विस्टा के साथ शामिल है। XP के लिए, यह SP2 सपोर्ट टूल में है और W2K के लिए, यह संसाधन टूलकिट में है।
RealHowTo

4

ज्यादातर मामलों में,% USERNAME% चर वह होगा जो आप चाहते हैं।

echo %USERNAME%

हालाँकि, अगर आप एक ऊंचा cmd शेल चला रहे हैं, तो% USERNAME% आपके स्वयं के उपयोगकर्ता नाम के बजाय व्यवस्थापक नाम की रिपोर्ट करेगा। यदि आप बाद वाले को जानना चाहते हैं, तो दौड़ें:

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

1

उपयोगकर्ता नाम और चर के बीच यह मुख्य अंतर है:

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

एक मानक संदर्भ में, प्रत्येक जुड़ा हुआ उपयोगकर्ता एक एक्सप्लोरर। Exe प्रक्रिया रखता है: कमांड [कार्यसूची / V। "खोजकर्ता" खोजता है] एक पंक्ति देता है जिसमें explorer.exe प्रक्रिया का मालिक होता है, एक अनुकूलित regex के साथ यह आवश्यक प्राप्त करना संभव है। मूल्य। यह भी विंडोज 7 के तहत पूरी तरह से चलता है।

दुर्लभ मामलों में explorer.exe को किसी अन्य प्रोग्राम द्वारा बदल दिया जाता है, खोज फ़िल्टर को इस मामले से मेल खाने के लिए अनुकूलित किया जा सकता है। यदि कमांड एक खाली लाइन देता है, तो यह संभव है कि कोई उपयोगकर्ता लॉग ऑन न हो। विंडोज 7 के साथ [क्वेरी सत्र | ""> "को चलाना भी संभव है।


0

जहाँ तक ब्लूबियर प्रतिक्रिया सबसे अच्छी लगती है (जबकि मैं, मैं अपने बैच स्क्रिप्ट को उदाहरण के लिए चला रहा हूँ। सिस्टम अधिकार) मुझे इसमें कुछ जोड़ना होगा। क्योंकि मेरे विंडोज लैंग्वेज वर्जन (पोलिश) लाइन में "%% a %% b" == "यूजर नेम:" लिखा है, जिसे वास्तव में कंप्लीट किया जाता है (इसमें मेरी भाषा में कुछ वर्णात्मक अक्षर होते हैं) मैं अपनी पहली लाइनें छोड़ता हूं। 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
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.