मैं कमांड लाइन से सत्र आईडी कैसे प्राप्त कर सकता हूं?


26

मैं विंडोज़ कमांड लाइन के माध्यम से वर्तमान उपयोगकर्ता सत्र आईडी कैसे प्राप्त कर सकता हूं?

उपयोगकर्ता टैब के तहत कार्यसूची में, प्रत्येक उपयोगकर्ता एक सत्र आईडी के साथ जुड़ा हुआ है। मैं इसे कमांड लाइन के माध्यम से पुनः प्राप्त करना चाहता हूं ताकि मैं इसे दूरस्थ अनुप्रयोग के लिए उपयोग कर सकूं।


मुझे यकीन नहीं है कि सत्र आईडी से आपका क्या मतलब है?
ईबीग्रीन

उपयोगकर्ता टैब के तहत कार्यसूची में, प्रत्येक उपयोगकर्ता एक सत्र आईडी के साथ जुड़ा हुआ है। मैं इसे कमांड लाइन के माध्यम से पुनः प्राप्त करना चाहता हूं ताकि मैं इसे दूरस्थ अनुप्रयोग के लिए उपयोग कर सकूं।
नकारात्मक


%% G होगा यदि आप इसे बैच से कहते हैं,% G यदि सीधे कमांड लाइन से है

जवाबों:


28

यह निश्चित रूप से सबसे कुशल तरीका नहीं है, लेकिन आप इसके परिणामों पर एक नज़र डाल सकते हैं tasklist। यह चल रही प्रत्येक प्रक्रिया का नाम और सत्र # प्रदर्शित करेगा। यदि आप स्थानीय रूप से लॉग इन हैं तो "कंसोल" नाम के सत्र के लिए आईडी देखें।

d:\>tasklist

Image Name                     PID Session Name        Session#    Mem Usage
========================= ======== ================ =========== ============
System Idle Process              0 Services                   0         24 K
System                           4 Services                   0      8,580 K
smss.exe                       316 Services                   0      1,500 K
...snip

संपादित करें :

Query Session सत्र आईडी पुनः प्राप्त करेगा:

d:\>query session
 SESSIONNAME       USERNAME                 ID  STATE   TYPE        DEVICE
 services                                    0  Disc
>console           janedoe                   1  Active
 rdp-tcp                                 65536  Listen

मैं इसे कमांड लाइन के माध्यम से प्राप्त करना चाहता हूं।
नकारात्मक

1
कमांड लाइन से राइट, टास्कलिस्ट टाइप करें।
गैरी

1
हम्म वास्तव में आप यहाँ पर हो सकते हैं। संपादित करें: इस आउटपुट को पार्स करने पर कार्य सूची / FI "कल्पना नाम eq cmd.exe" / एफओ सूची। धन्यवाद!
नकारात्मक

या मैं ऐसा कर सकता हूं। नाइस
नकारात्मक

tasklistअच्छा है क्योंकि इसके लिए प्रो / एंट ओएस संस्करण की आवश्यकता नहीं है। आप एक्सप्लोरर tasklist /fi "imagename eq explorer.exe"
शॉन

5
for /f "tokens=4 delims= " %%G in ('tasklist /FI "IMAGENAME eq tasklist.exe" /NH') do SET RDP_SESSION=%%G
echo Current RDP Session ID: %RDP_SESSION%

1
ऑस्कर के समाधान ने वास्तव में मेरे लिए काम किया, जब %% G को% G के साथ बदल दिया:% / f "tokens = 4 delims ="% G in ('कार्यसूची / FI "IMAGENAME eq tasklist.exe" / NH ") SET RDP_SESSION =% जी
पावेल स्टेनकोव्स्की

2
@ PawełStankowski: यह अंतर है अगर आप इसे बैच फ़ाइल (%%) या कंसोल (%) से चलाते हैं
थॉमस वेलर

ध्यान दें कि यह असंभावित घटना में टूट जाता है कि एक tasklistही समय में कई उपयोगकर्ता चल रहे हैं ।
मैथ्यू लुंडबर्ग 22

5

यह गैरी के जवाब और ऑस्कर के जवाब के पहलुओं को जोड़ती है । जैसा कि गैरी ने नोट किया, आउटपुट query sessionकुछ ऐसा दिखता है

 SESSIONNAME       USERNAME                 ID  STATE   TYPE        DEVICE
 services                                    0  Disc
>console           janedoe                   1  Active
 rdp-tcp                                 65536  Listen

या, मेरे मामले में ("स्विच उपयोगकर्ता" का उपयोग करके)

 SESSIONNAME       USERNAME                 ID  STATE   TYPE        DEVICE
 services                                    0  Disc
>console           gman                      1  Active
                   otherguy                  2  Disc

(मेरे पास आरडीपी स्थापित नहीं है, इसलिए मैं इसके साथ परीक्षण नहीं कर सकता।) संभवतः प्रश्न का इरादा वर्तमान में सक्रिय सत्र की आईडी निर्धारित करना है। मेरा सुझाव है query session कि वर्तमान सत्र की तरह लग रहा है के लिए उत्पादन खोज :

 for /f "tokens=2-4" %a in ('query session') do @if "%a"=="%username%" if "%c"=="Active" echo %b

जो 2nd, 3rd, और 4 शब्द के उत्पादन की प्रत्येक पंक्ति से (जिसे हम USERNAME होने के लिए, [सत्र] आईडी, और राज्य आशा) निर्दिष्ट query sessionकरने के लिए %a, %bऔर %cक्रमशः,, और फिर लाइन जहां से रिपोर्ट सत्र आईडी USERNAME मैं हूँ और राज्य है Active

यह पता चला है कि query sessionएक usernameपैरामीटर लगता है , इसलिए ऊपर को सरलीकृत किया जा सकता है

 for /f "tokens=2-4" %a in ('query session %username%') do @if "%c"=="Active" echo %b

या

for /f "tokens=3-4" %a in ('query session %username%') do @if "%b"=="Active" echo %a

स्क्रिप्ट (बैच फ़ाइल) में इसका उपयोग करने के लिए, आप कहना चाह सकते हैं

set MY_SESSION_ID=unknown
for /f "tokens=3-4" %%a in ('query session %username%') do @if "%%b"=="Active" set MY_SESSION_ID=%%a

का उपयोग करते हुए %%aऔर %%b(के बजाय %aऔर %b) है क्योंकि यह एक लिपि में है। @ यदि पूरी बैच फ़ाइल है तो आप शायद इसे छोड़ सकते हैं @echo off। आरंभीकरण unknownआपको त्रुटि से निपटने की अनुमति देता है (यह पता लगाने पर कि क्या query session उस मैच के आउटपुट में कोई रेखा नहीं है )। पहचानने और प्रतिक्रिया करने के लिए त्रुटि-हैंडलिंग का विस्तार अगर वहाँ के आउटपुट में कई मिलान लाइनें हैं, तो query session व्यायाम के रूप में छोड़ दिया जाता है।


मेरे वास्तविक दुनिया के मामले में, यदि कई सत्र हैं, तो उनके पास हमेशा एक ही उपयोगकर्ता नाम होगा। लेकिन यह शायद विशिष्ट नहीं है।
मैथ्यू लुंडबर्ग

@MatthewLundberg: स्टेट के बारे में कैसे? क्या वर्तमान सत्र के अलावा अन्य सत्र "सक्रिय" के रूप में पहचाने जाते हैं?
जी-मैन का कहना है कि 'मोनिका' बहाल

हां, वे सक्रिय होंगे। यह एक सर्वर ओएस है।
मैथ्यू लुंडबर्ग

2

सत्र नाम के विपरीत, सत्र आईडी को एक चर में संग्रहीत नहीं किया जाता है और इसे प्राप्त करना उतना आसान नहीं है। मुझे यकीन है कि एक है, लेकिन मैं एक कमांड लाइन टूल में ऐसा नहीं सोच सकता जो ऐसा करता है।

हालाँकि, मैंने एक छोटी .exe फ़ाइल (C #, .Net 4) लिखी है जो ऐसा करती है।

यह सत्र आईडी को प्रदर्शित करेगा, और यह रिटर्न कोड के रूप में भी होगा ताकि आप इसे विभिन्न प्रकार की स्क्रिप्ट / तकनीकों में उपयोग कर सकें।

MediaFire पर फाइल करने के लिए लिंक


1

यह ऑस्कर बेह के कोड पर आधारित है।

tasklistकिसी दिए गए निष्पादन योग्य के सभी उदाहरणों के लिए सत्र ID (और अन्य जानकारी) को दिखाएगा, जिसमें स्वयं भी शामिल है। जैसा कि आप कमांड चला रहे हैं, यह आपके सत्र आईडी को दिखाएगा। उनके कोड में एकमात्र संभावित दोष यह है कि अगर कार्यक्रम के कई उदाहरण हैं, तो यह आपको सूचित नहीं करता है, जिससे स्क्रिप्ट गलत परिणाम दे सकती है।

यहां हम tasklistयह सुनिश्चित करने के सभी उदाहरणों की रिपोर्ट करते हैं कि उस आदेश को चलाने वाला कोई अन्य सत्र नहीं है:

for /f "tokens=4 delims= " %%G in ('tasklist /FI "IMAGENAME eq tasklist.exe" /NH') do echo Session ID %%G

यदि आप दो सत्र ID की रिपोर्ट देखते हैं, तो स्क्रिप्ट फिर से चलाएँ।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.