कमांड-लाइन स्क्रिप्ट चलाते समय, क्या वर्तमान उपयोगकर्ता का नाम प्राप्त करना संभव है?
कमांड-लाइन स्क्रिप्ट चलाते समय, क्या वर्तमान उपयोगकर्ता का नाम प्राप्त करना संभव है?
जवाबों:
उपयोगकर्ता नाम:
echo %USERNAME%
डोमेन नाम:
echo %USERDOMAIN%
set
कमांड प्रॉम्प्ट से कमांड चलाकर आप पर्यावरण चर की पूरी सूची प्राप्त कर सकते हैं ।
बस कमांड प्रॉम्प्ट में इस कमांड का उपयोग करें
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
। यह सब इस बात पर निर्भर करता है कि उपयोगकर्ता (हमारे लिए, ओपी) को क्या जरूरत है , अर्थात यदि डोमेन हिस्सा महत्वपूर्ण है।
इसमें होना चाहिए %USERNAME%
। जाहिर है कि यह आसानी से खराब हो सकता है, इसलिए सुरक्षा के लिए इस पर भरोसा न करें।
उपयोगी टिप: set
कमांड प्रॉम्प्ट में टाइप सभी पर्यावरण चर को सूचीबद्ध करेगा।
उत्तर इस बात पर निर्भर करता है कि आप किस "कमांड-लाइन स्क्रिप्ट" भाषा में हैं।
वर्ष में cmd.exe
कमांड प्रॉम्प्ट या एक में .bat
या .cmd
स्क्रिप्ट, आप निम्न का उपयोग कर सकते हैं:
%USERNAME%
- बस उपयोगकर्ता नाम हो जाता है।
%USERDOMAIN%
- उपयोगकर्ता के डोमेन हो जाता है।
PowerShell आदेश में शीघ्र या एक .ps1
या .psm1
स्क्रिप्ट, आप निम्न का उपयोग कर सकते हैं:
[System.Security.Principal.WindowsIdentity]::GetCurrent().Name
- आपको पूरी तरह से योग्य उपयोगकर्ता नाम (जैसे डोमेन \ उपयोगकर्ता नाम) देता है। यह भी सबसे सुरक्षित तरीका है क्योंकि यह $Env
नीचे के अन्य चर की तरह उपयोगकर्ता द्वारा ओवरराइड नहीं किया जा सकता है ।
$Env:Username
- बस उपयोगकर्ता नाम हो जाता है।
$Env:UserDomain
- उपयोगकर्ता के डोमेन हो जाता है।
$Env:ComputerName
- कंप्यूटर का नाम हो जाता है।
% 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
मैं परीक्षण के लिए बैच फ़ाइलों को लिखने में इस पद्धति का उपयोग करता हूं।
echo %userdomain%\%username%
चूँकि प्रमाणीकरण की आवश्यकता होने पर आप पासवर्ड को सादे पाठ में शामिल करते हैं, मैं इसका उपयोग पूरी तरह से निजी वातावरण में करूँगा जहाँ अन्य उपयोगकर्ता इसे नहीं देख सकते हैं या यदि पासवर्ड देखने वाला उपयोगकर्ता कोई परिणाम नहीं देगा।
आशा है कि यह किसी को बाहर करने में मदद करता है।
यह हमेशा मुझे नाराज है कैसे विंडोज जैसे यूनिक्स के और अधिक उपयोगी थोड़ा पटकथा उपयोगिताओं, में से कुछ भी नहीं है जो / Whoami , sed और AWK । वैसे भी, यदि आप कुछ मूर्ख बनाना चाहते हैं, तो Visual Studio Express प्राप्त करें और निम्नलिखित संकलन करें:
#include <windows.h>
#include <stdio.h>
int main(int argc, char **argv) {
printf("%s", GetUserName());
}
और बस अपने बैच फ़ाइल में उपयोग करें।
net config Workstation | find "User name"
whoami
विंडोज विस्टा के साथ शुरू उपलब्ध है।
ज्यादातर मामलों में,% USERNAME% चर वह होगा जो आप चाहते हैं।
echo %USERNAME%
हालाँकि, अगर आप एक ऊंचा cmd शेल चला रहे हैं, तो% USERNAME% आपके स्वयं के उपयोगकर्ता नाम के बजाय व्यवस्थापक नाम की रिपोर्ट करेगा। यदि आप बाद वाले को जानना चाहते हैं, तो दौड़ें:
for /f "tokens=2" %u in ('query session ^| findstr /R "^>"') do @echo %u
उपयोगकर्ता नाम और चर के बीच यह मुख्य अंतर है:
C:\Users\user.name>echo %username%
user.name
C:\Users\user.name>whoami
domain\user.name
DOMAIN = bios name of the domain (not fqdn)
एक मानक संदर्भ में, प्रत्येक जुड़ा हुआ उपयोगकर्ता एक एक्सप्लोरर। Exe प्रक्रिया रखता है: कमांड [कार्यसूची / V। "खोजकर्ता" खोजता है] एक पंक्ति देता है जिसमें explorer.exe प्रक्रिया का मालिक होता है, एक अनुकूलित regex के साथ यह आवश्यक प्राप्त करना संभव है। मूल्य। यह भी विंडोज 7 के तहत पूरी तरह से चलता है।
दुर्लभ मामलों में explorer.exe को किसी अन्य प्रोग्राम द्वारा बदल दिया जाता है, खोज फ़िल्टर को इस मामले से मेल खाने के लिए अनुकूलित किया जा सकता है। यदि कमांड एक खाली लाइन देता है, तो यह संभव है कि कोई उपयोगकर्ता लॉग ऑन न हो। विंडोज 7 के साथ [क्वेरी सत्र | ""> "को चलाना भी संभव है।
जहाँ तक ब्लूबियर प्रतिक्रिया सबसे अच्छी लगती है (जबकि मैं, मैं अपने बैच स्क्रिप्ट को उदाहरण के लिए चला रहा हूँ। सिस्टम अधिकार) मुझे इसमें कुछ जोड़ना होगा। क्योंकि मेरे विंडोज लैंग्वेज वर्जन (पोलिश) लाइन में "%% 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