কমান্ড-লাইন স্ক্রিপ্ট চলাকালীন, বর্তমান ব্যবহারকারীর নাম পাওয়া সম্ভব?
কমান্ড-লাইন স্ক্রিপ্ট চলাকালীন, বর্তমান ব্যবহারকারীর নাম পাওয়া সম্ভব?
উত্তর:
ব্যবহারকারীর নাম:
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%
- ব্যবহারকারীর ডোমেন পায়।
পাওয়ারশেল কমান্ড প্রম্পট বা একটি .ps1
বা .psm1
স্ক্রিপ্টে আপনি নিম্নলিখিতটি ব্যবহার করতে পারেন:
[System.Security.Principal.WindowsIdentity]::GetCurrent().Name
- আপনাকে পুরোপুরি যোগ্যতাসম্পন্ন ব্যবহারকারীর নাম দেয় (যেমন ডোমেন \ ব্যবহারকারীর নাম)। এটিও সবচেয়ে সুরক্ষিত পদ্ধতি কারণ এটি $Env
নীচের অন্যান্য ভেরিয়েবলগুলির মতো ব্যবহারকারীর দ্বারা ওভাররাইড করা যায় না ।
$Env:Username
- কেবল ব্যবহারকারীর নাম পান।
$Env:UserDomain
- ব্যবহারকারীর ডোমেন পায়।
$Env:ComputerName
- কম্পিউটারের নাম পেয়ে যায়।
% USERNAME% আপনাকে বর্তমানে চলমান প্রক্রিয়াটির ব্যবহারকারীর নামটি পাবে। আপনি কীভাবে আপনার ব্যাচের ফাইলটি চালাচ্ছেন তার উপর নির্ভর করে এটি বর্তমান ব্যবহারকারীর নামের মতো হবে না। উদাহরণস্বরূপ, আপনি কোনও ব্যাবস্থা ফাইল একটি নির্ধারিত টাস্কের মাধ্যমে কোনও পরিষেবা ইত্যাদি থেকে চালাচ্ছেন might
এক্সপ্লোরার.এক্স.ই.এস. টাস্কটি শুরু করা ব্যবহারকারীর নাম স্ক্র্যাপ করে বর্তমানে লগ-ইন করা ব্যবহারকারীর নাম ব্যবহারের আরও নিশ্চিত উপায় এখানে:
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 । যাইহোক, আপনি যদি কিছু নির্বোধ চান, ভিজ্যুয়াল স্টুডিও এক্সপ্রেস পান এবং নিম্নলিখিতগুলি সংকলন করুন:
#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%
তবে, আপনি যদি একটি উন্নত সেমিডি শেল চালাচ্ছেন, তবে% 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)
একটি প্রমিত প্রসঙ্গে, প্রতিটি সংযুক্ত ব্যবহারকারী একটি এক্সপ্লোরার এক্সেক্স প্রক্রিয়া ধারণ করে: কমান্ড [টাস্কলিস্ট / ভি | "এক্সপ্লোরার" সন্ধান করে] একটি এক্সপ্লোরার এক্সেক্স প্রসেসের মালিক ধারণ করে এমন একটি রেখা ফেরায়, একটি অভিযোজিত রেজেক্স সহ প্রয়োজনীয় প্রাপ্তি সম্ভব মান। এটি উইন্ডোজ 7 এর অধীনেও পুরোপুরি চলে।
বিরল ক্ষেত্রে এক্সপ্লোরার.এক্সএইকে অন্য কোনও প্রোগ্রাম দ্বারা প্রতিস্থাপন করা হয়, এই ফিল্ডটি মিলানোর জন্য অনুসন্ধান ফিল্টারটি মানিয়ে নেওয়া যেতে পারে। কমান্ডটি যদি খালি লাইন ফেরত দেয় তবে সম্ভবত কোনও ব্যবহারকারী লগইন না হওয়ার সম্ভাবনা রয়েছে। উইন্ডোজ 7 এর মাধ্যমে [ক্যোয়ারী সেশন | সন্ধান করুন ">"] চালানোও সম্ভব।
যতদূর ব্লুবিয়ারের প্রতিক্রিয়াটি সর্বাধিক সন্ধান করুন (যদিও আমি আমার ব্যাচের স্ক্রিপ্টটি উদাহরণ সহ চালাচ্ছি। সিস্টেমের অধিকারগুলি) আমাকে এতে কিছু যুক্ত করতে হবে। কারণ আমার উইন্ডোজ ভাষার সংস্করণে (পোলিশ) লাইনটিতে "%% a %% বি" == "ব্যবহারকারীর নাম:" ক্যাচ করা উচিত সত্যই সংঘবদ্ধ হয় (এতে আমার ভাষায় কিছু ডায়রিট্রিক অক্ষর রয়েছে) আমি প্রথম lines টি লাইন এড়িয়ে চলেছি এবং 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