उत्पादन वातावरण में लॉगऑन, डिस्कनेक्ट या टर्मिनल सर्वर उपयोगकर्ता को रीसेट करने में असमर्थ


19

मैं 2008 टर्मिनल सर्वर में उपयोगकर्ता के सत्र को डिस्कनेक्ट करने, लॉगऑफ़ करने या रीसेट करने के कुछ तरीकों की तलाश कर रहा हूं (उपयोगकर्ता के रूप में लॉगिन करने में असमर्थ या तो यह पूरी तरह से लॉक-अप है)। यह एक उत्पादन वातावरण है, इसलिए सर्वर को रिबूट करना या कुछ सिस्टम-वाइड करना अभी के लिए प्रश्न से बाहर है। किसी भी शक्तियाँ हमें इस के साथ मदद करने के लिए चालें?

हमने बिना किसी परिणाम के सीधे एक ही टर्मिनल सर्वर (कार्य प्रबंधक, टर्मिनल सेवा प्रबंधक और संसाधन मॉनिटर से) सत्र की प्रक्रियाओं को मारने के साथ-साथ उपयोगकर्ता को लॉग ऑफ करने और सत्र को रीसेट करने की कोशिश की है।

मदद!


अद्यतन: हमने सर्वर को रिबूट करते हुए समाप्त कर दिया क्योंकि कोई अन्य प्रयास नहीं जो हम काम कर सकते थे। मैं इस सवाल को खुला छोड़ देता हूँ कि किसी को इस मुद्दे के बारे में अधिक जानकारी हो सकती है, और यह संभावित सुधार है


2
मेरे पास अपनी विंडोज़ 2008 R2 SP1 टर्मिनल सर्वर पर ठीक यही समस्या है। वे बस बेतरतीब ढंग से लटकाते हैं और उपयोगकर्ता सर्वर पर लॉगऑफ या लॉगऑन करने में असमर्थ हैं। मैं स्थानीय व्यवस्थापक या डोमेन व्यवस्थापक के रूप में स्थानीय लॉग ऑन नहीं कर सकता। सर्वर से कनेक्ट करने का एकमात्र तरीका compmgmt.msc का उपयोग कर रहा है, लेकिन यहां तक ​​कि मैं इवेंट लॉग में कोई समस्या नहीं देख सकता। कुछ चरणों में मुझे एक संदेश मिलता है जिसमें कहा गया है कि IMA सेवा जवाब नहीं दे रही है और सर्वर को तह खेत से हटा दिया गया है। इसे हल करने का एकमात्र तरीका सर्वर को रिबूट करना है। बिजली बंद और फिर से वापस। मैं कुछ भी करने के लिए इस कारण को कम नहीं कर पाया और मैं



1
किसी के लिए संभावित रूप से उपयोगी लिंक इस मुद्दे को आगे
बढ़ाते

जवाबों:


7

इस समस्या को हल करने के लिए मेरे लिए जो काम किया गया था वह टास्क मैनेजर के तहत लॉक किए गए खाते के तहत चल रही सभी प्रक्रियाओं को मारना था और फिर मैं केवल उस खाते (एक प्रशासक खाते से) को लॉग ऑफ करने में सक्षम था।

तब उपयोगकर्ता खाते के नीचे लॉग ऑन करने में सक्षम था।

कोई रिबूट आवश्यक नहीं था और किसी तीसरे पक्ष के सॉफ़्टवेयर को डाउनलोड करने की आवश्यकता नहीं थी।


-धन्यवाद, मुझे सर्वर रीबूट करने से बचाया! वास्तव में 1 अटक सत्र के कारण कार्यदिवस के दौरान सभी को बाहर निकालना नहीं चाहता था।
MAW74656 15

क्या इन प्रक्रियाओं को मारना सुरक्षित है? मेरे उपयोगकर्ता है csrss.exe, dwm.exe, LoginUI.exe, और winlogon.exe। मैंने सोचा था कि हत्या winlogon.exeएक बीएसओडी को ट्रिगर करेगी ...
binki

6

मैं सर्वर को रिबूट करने की आवश्यकता के बिना खाता कैसे रीसेट करता हूं, यह साझा करना चाहता हूं। सबसे पहले आपको सर्वर तक व्यवस्थापक पहुंच की आवश्यकता होगी। मैं निम्नलिखित लॉगऑन विकल्प का उपयोग करता हूं: सर्वर तक पहुंचने के लिए mstsc / v: servername / कंसोल / व्यवस्थापक । फिर "विंडोज टाक्स मैनेजर" में, उपयोगकर्ता टैब पर जाएं और उस खाते पर एक राइट क्लिक करने के लिए आगे बढ़ें जिसे आप "लॉग ऑफ" करना चाहते हैं, लॉग ऑफ का चयन करें। यह उस खाते द्वारा उपयोग किए गए बंद सत्र को मुक्त करना चाहिए।


1
सिवाय इसके कि यह हमेशा नहीं होता है। साथ ही ओपी ने कहा कि उन्होंने पहले ही यह कोशिश कर ली है।
बियोवुल्फ़न्यूड42

इस समस्या के लिए, कार्य प्रबंधक → उपयोगकर्ताओं में साइन आउट करें बटन कुछ नहीं करता है।
binki

5

सरल उत्तर एक उन्नत कमांड प्रॉम्प्ट चलाना और "टास्कमगर्" टाइप करना है और फिर यह आपको USERS टैब के तहत सत्रों को लॉगऑफ करने की अनुमति देगा। यह ऊंचे सत्र में होने के बिना काम नहीं करेगा।


परीक्षण किया गया और उस समाधान ने काम किया।
ओवरमाइंड

1
मेरे लिए नहीं। उपयोगकर्ता की किसी भी प्रक्रिया को मारने के लिए प्रशासक के रूप में भी कार्यपालक का उपयोग नहीं कर सकते हैं।
बियोवुल्फ़न्यूड42

3

आप एक cmd शुरू कर सकते हैं, एक क्वेरी सत्र कर सकते हैं , सत्र की आईडी की हत्या कर सकते हैं और फिर एक रीसेट सत्र कर सकते हैं । उदाहरण के लिए, यदि आप क्वेरी सत्र के साथ यह पाते हैं कि सत्र नाम rdp-tcp # 1 वह है जिसे आप मारना चाहते हैं, तो आप रीसेट सत्र rdp-tcp # 1 निष्पादित कर सकते हैं और इसे मार सकते हैं।


धन्यवाद, लेकिन यह भी मदद नहीं की।
l0c0b0x

जब मैं reset session 9उस कमांड को चलाता हूं तो बस लटका रहता है। : मेरी सत्र सक्रिय होने के लिए प्रदर्शित होने के बिना चल रहे चार प्रक्रियाओं के लिए जारी है crss.exe, dwm.exe, LogonUI.exe, और winlogon.exei.imgur.com/cFM62RA.png और query session 9आउटपुट No User exists for 9
binki

3

मुझे लगता है कि आज वही मेरे Win2008R2 टर्मिनल सर्वर पर हुआ। सहानुभूति ये थीं: 1. उसने मुझे "'कनेक्टिंग' संदेश से हमेशा के लिए लटका दिया।" वह सिर्फ एक साधारण उपयोगकर्ता है इसलिए मैं विस्तृत समस्या वर्णन की उम्मीद नहीं कर सकता। 2. सत्र बंद करने / रीसेट करने का प्रयास किया (जो आमतौर पर इन मामलों में मदद करता है) - काम नहीं किया। सत्र अभी भी 'डिस्कनेक्ट' स्थिति के साथ सूची में लटका हुआ है। 3. उस उपयोगकर्ता के लिए सभी प्रक्रियाओं को मारने की कोशिश की - मदद नहीं की। सत्र जारी रहता है और मारे जाने से इनकार करता है।

समाधान था - उपयोगकर्ता के रूप में कनेक्ट करें (अपने क्रेडेंशियल्स के साथ लॉगिन करें यदि आप उसके पासवर्ड को रीसेट कर सकते हैं या किसी तरह की रिमोट सहायता का उपयोग करके देख सकते हैं कि उसके कंप्यूटर पर क्या होता है) और देखें कि लॉगऑन विंडो में क्या होता है। कनेक्ट करते समय मैंने RDP क्लाइंट के 'विवरण' बटन पर क्लिक किया था - और यहाँ यह था, एक त्रुटि संदेश जो कि winlogon ने कुछ गलत किया था, वह उपयोगकर्ता के लिए 'रिट्री / इग्नोर / वगैरह' बटन पर क्लिक करने की प्रतीक्षा कर रहा था और चूंकि यह सर्वव्यापी जीत है। यह सब अजीब व्यवहार है।

ps मुझे वास्तव में एक सत्र को मारने के लिए कोई रास्ता नहीं मिला :(


यह मेरे लिए यह तय! यह प्रतीक्षा कर रहा था कि उपयोगकर्ता किसी अन्य उपयोगकर्ता को डिस्कनेक्ट करने या रद्द करने का विकल्प चुन सकता है। मैंने रद्द कर दिया और अब वह उपयोगकर्ता जो कार्य प्रबंधक के उपयोगकर्ता टैब में अटक गया था गायब हो गया। धन्यवाद!
बिंकी

जब यह समस्या थी तो मेरी स्थिति ऐसी थी: i.imgur.com/W6eO5wW.png i.imgur.com/EpPwyJc.png i.imgur.com/cFM62RA.png इसके अलावा, मैं Windows Server 2016 का उपयोग कर रहा हूं
बिंकी

3

हमारे पास हमारे विंडोज सर्वर 2008 R2 रिमोट डेस्कटॉप सर्वर के साथ एक समान मुद्दा था। आरडीएस प्रबंधक को देखते समय उपयोगकर्ता सत्र ने "सक्रिय" दिखाया, लेकिन संबंधित सत्र आईडी # या जुड़ा डिवाइस नहीं दिखा रहा था (दोनों खाली थे)।

ऊपर दिए गए सभी टोटके समस्या का समाधान नहीं करते हैं। जब उपयोगकर्ता को प्रश्न के रूप में जोड़ते हैं, तो एक त्रुटि संदेश यह कहते हुए वापस आ जाता है कि टर्मिनल सर्वर व्यस्त था और बाद में फिर से प्रयास करने के लिए या व्यवस्थापक से संपर्क करें।

हम सर्वर को रिबूट करने के लिए भी घाव करते हैं।


2

विंडोज सर्वर 2016 में मेरे पास एक ही मुद्दा था। उपयोगकर्ता लॉगिन करने में सक्षम नहीं था।

इसलिए मैंने अनाथ सत्र को डिस्कनेक्ट करने के लिए निम्नलिखित चरणों की कोशिश की:

  1. CLI qwinsta में सभी उपलब्ध सत्रों, निष्क्रिय और सक्रिय लोगों को सूचीबद्ध किया गया है, एक उपयोगकर्ता नाम के बिना एक डिस्कनेक्ट सत्र (जिसे "getr" कहा जाता है) स्क्रीनशॉट में है, लेकिन एक सत्र आईडी।

सक्रिय सत्र दिखाएं और उन्हें मार डालें

  1. सत्र आईडी (7) से 1. मैंने इस सत्र को या तो रीसेट सत्र 7 के साथ मारने की कोशिश की ( फी : rwinsta रीसेट सत्र के लिए एक उपनाम है)

  2. इसने एक सत्र के लिए काम किया, लेकिन अगली बार इसका कोई प्रभाव नहीं पड़ा, इसलिए मैंने कार्य प्रबंधक और उपयोगकर्ता टैब खोला। वहाँ आपको प्रत्येक दूरस्थ डेस्कटॉप उपयोगकर्ता को सौंपी गई एक विस्तार योग्य सूची मिलती है - एक सूची में कोई उपयोगकर्ता नाम नहीं था और केवल 4 कार्यों को दिखाया गया था।

  3. मैंने स्पष्ट करने की कोशिश की: उपयोगकर्ता को लॉग करना। बिना किसी प्रभाव के।

उपयोगकर्ता को लॉगऑफ़ करने का प्रयास कर रहा है

  1. इसलिए मैंने इस उपयोगकर्ता को सौंपे गए उन 4 कार्यों को समाप्त करने की कोशिश की। सावधान रहें, क्योंकि कुछ कार्यों, सबसे महत्वपूर्ण रूप से csrss.exe, जब मारा जाता है, तो सिस्टम का एक रिबूट भी होगा। मैंने उन्हें छोड़ दिया और बस कुछ स्पष्ट आरडीपी-कार्यों को मार दिया।

चरण / प्रयास 4 के बाद भी अंतिम दुर्घटनाग्रस्त सत्र मारा गया था और उपयोगकर्ता फिर से लॉगिन करने में सक्षम था

  1. यदि यह अभी भी काम नहीं कर रहा है, तो इस समाधान को किसी अन्य प्रश्न से आज़माएं : जब आप RDP क्लाइंट से जुड़ते हैं, तो "विवरण" पर क्लिक करें -बटन। वहां आपको एक त्रुटि दिखनी चाहिए और आप पुनः प्रयास या उपेक्षा पर भी क्लिक कर सकते हैं

क्या आप इस बारे में अधिक विशिष्ट हो सकते हैं कि आपने किन प्रक्रियाओं को मार दिया है और किन को नहीं मारना है? मुझे लगता है कि मैं छोड़ देना चाहिए winlogon.exeलेकिन जैसे अन्य लोगों को लेकर अनिश्चित हूं LoginUI.exe, csrss.exeऔर dwm.exe
बिंकी

दूसरे सत्र के लक्षण आपके लिए मेरे और serverfault.com/a/176080/164429 के समान थे । आप शायद अधिक संपूर्ण समाधान के लिए प्रयास करने के लिए एक कदम के रूप में "कनेक्ट" जोड़ सकते हैं और शायद प्रक्रियाओं को मारने की आवश्यकता से भी बचें।
binki

@binki यह "csrss.exe" होना चाहिए - यदि आप इस प्रक्रिया को मारते हैं, तो सिस्टम पुनरारंभ हो जाएगा।
एनआर

1

यह जाँचने योग्य हो सकता है कि उपयोगकर्ता के पास दूरस्थ डेस्कटॉप विंडो के पीछे alt + टैब के साथ एक क्रेडेंशियल पॉप-अप बॉक्स नहीं है।

एक सहकर्मी के पास एक ही मुद्दा था; लॉग-ऑफ या रीसेट नहीं कर सका, और उसकी सभी प्रक्रियाएं मैन्युअल रूप से बंद हो गईं। जब मैंने गुई को उस सिस्टम से एक्सेस करने की कोशिश की, जब वह FROM को रेमोटर कर रहा था, तो मुझे रिमोट सेशन के पीछे एक साख बॉक्स छिपा हुआ मिला।


1

मैं एक ही स्थिति चाहता हूं: दूरस्थ डेस्कटॉप सेवाओं के साथ एक विंडोज सर्वर 2008 आर 2, सत्र निष्क्रिय होने या 3 घंटे के डिस्कनेक्ट होने के बाद उपयोगकर्ताओं को लॉग ऑफ करने के लिए स्थापित किया गया आरडीपी कनेक्शन, और अभी भी कुछ सत्र बंद रहे। मैंने उन्हें बिना किसी सफलता के साथ रिमोट डेस्कटॉप मैनेजर और qwinsta / quser के साथ लॉग इन करने की कोशिश की।

यहां बताया गया है कि मैंने इसे कैसे हल किया:

  1. मैंने सत्र आईडी के साथ स्थित है qwinsta
  2. मैं winlogon.exeत्रिशंकु सत्र के लिए पीआईडी ​​के साथ स्थित हूं query process /ID:yourid
  3. मैंने इस प्रक्रिया को मार दिया है taskkill /f /PID yourPID

जाने के लिए रास्ता। मैं अन्यथा ऐसा नहीं होने के लिए एक समाधान खोजना चाहते हैं।


1

मेरे लिए क्या काम था:

  • सर्वर पर लॉग ऑन करें
  • खुला कार्य प्रबंधक
  • उपयोगकर्ता टैब में उपयोगकर्ता की तलाश करें
  • राइट-क्लिक करें, कनेक्ट करें, उपयोगकर्ता पासवर्ड दर्ज करें, मैंने 'कृपया प्रतीक्षा करें' स्क्रीन देखी
  • ऑल्ट-टैब दबाएं, जिसने मुझे सर्वर से लॉग इन किया और उपयोगकर्ता को भी लॉग ऑफ किया

1

मेरे पास लॉक डेस्कटॉप डेस्कटॉप एप्लिकेशन उपयोगकर्ताओं के साथ यह समस्या थी। मैंने उपयोगकर्ताओं को लॉग ऑफ करने के लिए शेड्यूल किए गए कार्य पर चलने के लिए यह Powershell स्क्रिप्ट लिखी है जो 2 मिनट से अधिक के लिए डिस्कनेक्ट हो गई है। केवल वही संपादन आवश्यक है जो SERVERNAME है जिसे मैंने दूरस्थ डेस्कटॉप ब्रोकर सर्वर को बाहर करने के लिए सेट किया है, हालाँकि आप किसी भी सर्वर को पसंद कर सकते हैं, या कोई भी नहीं।

मेरी स्क्रिप्ट विंडोज सर्वर 2012 R2 के लिए लिखी गई थी, वैसे ...

स्क्रिप्ट ऐसा करती है:

  • सभी दूरस्थ डेस्कटॉप उपयोगकर्ता सत्रों की एक सूची मिलती है।
  • किसी भी सत्र को अनदेखा करें जो "STATE_DISCONNECTED" नहीं कहता है।
  • ब्रोकर सर्वर (या किसी अन्य सर्वर) पर ध्यान नहीं देता
  • बिना किसी सत्र सत्र आईडी वाले किसी भी सत्र को अनदेखा करता है
  • ऐसे किसी भी सत्र को अनदेखा करें जिसमें डिस्कनेक्ट समय नहीं है
  • उन सत्रों के लिए जिनके पास एक डिस्कनेक्ट समय है, यह वर्तमान समय की जांच करता है और यदि अब और डिस्कनेक्ट समय के बीच का अंतर X मिनट से अधिक है (इस मामले में 2), तो जीत की प्रक्रिया को मारता है।
  • यह एक लॉग ऑफ कमांड जारी करने का भी प्रयास करता है (यह सबसे अधिक संभावना है कि जीतलोन प्रक्रिया के मारे जाने के बाद विफल हो जाएगा)।

इससे मेरा काम बनता है! मुझे आशा है कि यह किसी और की मदद करता है! :)

CLS
$RD = Get-RDUserSession | select ServerName, UserName, SessionState, DisconnectTime, UnifiedSessionId, SessionId #Get details about the sessions
foreach ($item in $RD) {
    $UsessionID = $item.UnifiedSessionId -as [int] 
    $sessionID = $item.SessionId -as [int] 
    if ($item.SessionState -eq "STATE_DISCONNECTED" -and $item.ServerName -ne "SERVERNAME" -and $item.DisconnectTime -ne $null -and $item.UnifiedSessionId -ne $null){
        $TimeDiff = New-TimeSpan -start $item.DisconnectTime -end (Get-Date) #check time difference between disconnect time and now. If time is greater than 2 minutes....
        if ($TimeDiff.Minutes -gt 2) {
            #Kill winlogon session for the user
            Get-WmiObject -ComputerName $item.Servername -query "select * from win32_process where name='winlogon.exe'" | Where-Object {$_.SessionId -eq $SessionId} | %{$_.terminate()}
            #Log off user if session still exists (will fail if user kicked)
            Invoke-RDUserLogoff -HostServer $item.ServerName -UnifiedSessionID $UsessionID -Force -erroraction 'silentlycontinue'
            }
         }
      }

या यदि आप एक ऐसा संस्करण पसंद करते हैं जिसे आप देख सकते हैं कि स्क्रीन पर क्या हो रहा है:

 CLS
    $RD = Get-RDUserSession | select ServerName, UserName, SessionState, DisconnectTime, UnifiedSessionId, SessionId
    foreach ($item in $RD) {
        $UsessionID = $item.UnifiedSessionId -as [int]
        $sessionID = $item.SessionId -as [int]
        if ($item.SessionState -eq "STATE_DISCONNECTED" -and $item.ServerName -ne "SERVERNAME" -and $item.DisconnectTime -ne $null -and $item.UnifiedSessionId -ne $null){
            #On Screen Output
            write-host " Name : " $Item.UserName -ForegroundColor "yellow" -NoNewline
            write-host " Unified Session Id : " $UsessionID -ForegroundColor "darkcyan" -NoNewline
            write-host " User Session Id : " $sessionID -ForegroundColor "darkyellow" -NoNewline
            write-host " Session State : " $item.SessionState -ForegroundColor "magenta" -NoNewline
            write-host " Server : " $item.ServerName -ForegroundColor "cyan" -NoNewline
            write-host " Disconnect Time : " $item.DisconnectTime -ForegroundColor "gray" 
            #End On Screen Output
            $TimeDiff = New-TimeSpan -start $item.DisconnectTime -end (Get-Date)
            if ($TimeDiff.Minutes -lt 2) {
                write-host " Disconnected for less than 2 minutes" -ForegroundColor "Green"}
            else {
                write-host " Disconnected for more than 2 minutes" -ForegroundColor "Red" -BackgroundColor "darkyellow"
                write-host " Killing session : " $item.ServerName " ID : " $UsessionID $item.UserName -ForegroundColor "Red"
                #Kill Process "Winlogon.exe" for the user (this should kill the session)
                Get-WmiObject -ComputerName $item.Servername -query "select * from win32_process where name='winlogon.exe'" | Where-Object {$_.SessionId -eq $SessionId} | %{$_.terminate()}
                #Logout User (if session still exists)
                Invoke-RDUserLogoff -HostServer $item.ServerName -UnifiedSessionID $UsessionID -Force -erroraction 'silentlycontinue'
                Write-host " Done! " -ForegroundColor "Green" -BackgroundColor "blue"
                }
             }
          }

1

नोटपैड में एक फाइल बनाएं और इसे findession.cmd कहें। कमांड क्वेरी सेशन / सर्वर रखें: servername | / i "% 1" ढूंढें और एक निर्देशिका में सहेजें। Resetsession.cmd नामक एक और फ़ाइल बनाएं और कमांड रीसेट करें सत्र 1% / सर्वर:% 2 और सहेजें।

कमांड प्रॉम्प्ट से उस डायर पर जाएं, जिसमें आपने फाइल्स को सेव किया है और फाइंडेशन यूजरनेम टाइप करें (जिस यूजर को आप ढूंढने की कोशिश कर रहे हैं उसका लॉगिन)। हिट दर्ज करें और आपको लॉगिन और सत्र आईडी देखना चाहिए। Resetsession.cmd ID Servername टाइप करें और यह उस सत्र को रीसेट कर देगा। मैं इस दैनिक का उपयोग करता हूं और यह उपयोगकर्ताओं को खोजने और उनके सत्रों को रीसेट करने के लिए सुपर फास्ट है।


कृपया टेक्स्ट फ़ॉर्मेटिंग विकल्पों का उपयोग कमांडों को हाइलिग करने और पठनीयता को सशक्त बनाने के लिए करें। यह एक अच्छा जवाब है, लेकिन कृपया, इसे संपादित करें।
मार्को

जब कमांड बहुत कम हो तो बैच फाइल लिखने का कोई मतलब नहीं है और आपको उन्हें किसी भी तरह से तर्क देने की आवश्यकता होगी
binki

1
  1. के साथ सत्र आईडी का पता लगाएँ qwinsta
  2. सत्र के तहत सभी प्रक्रियाओं taskkill /FI "SESSION eq 1" /Fको मारें, सत्र आईडी को मानते हुए कि आप क्विंस्टन से लौटना चाहते थे 1 था।

यह सर्वर 2012 संस्करण 6.2 9 9 बिल्ड बिल्ड पर काम करता है, मुझे उम्मीद है कि यह विंडोज़ के सभी संस्करण पर काम करेगा।


1

यह पॉवर-शेल स्क्रिप्ट मेरे लिए काम करती है, यह एक अच्छी लॉग फ़ाइल भी देती है। मुझे यहां से मिल गया : मुझे आशा है कि यह किसी और की मदद करेगा क्योंकि अन्य उत्तरों में बहुत अधिक पूर्वापेक्षाएँ थीं और मेरे लिए काम नहीं किया।

    # .SYNOPSIS
    #   Checks for disconnected sessions and logs off the disconnected user sessions.

    #.DESCRIPTION
    #   Checks for disconnected sessions and logs off the disconnected user sessions.

    #.NOTES
    #   File Name: Logoff-DisconnectedSession.ps1
    #   Author   : Bart Kuppens
    #   Version  : 1.1

    #.EXAMPLE
    #   PS > .\Logoff-DisconnectedSession.ps1


    function Ensure-LogFilePath([string]$LogFilePath)
    {
     if (!(Test-Path -Path $LogFilePath)) {New-Item $LogFilePath -ItemType directory >> $null}
    }

    function Write-Log([string]$message)
    {
       Out-File -InputObject $message -FilePath $LogFile -Append
    }

    function Get-Sessions
    {
       $queryResults = query session
       $starters = New-Object psobject -Property @{"SessionName" = 0; "UserName" = 0; "ID" = 0; "State" = 0; "Type" = 0; "Device" = 0;}
       foreach ($result in $queryResults)
       {
          try
          {
             if($result.trim().substring(0, $result.trim().indexof(" ")) -eq "SESSIONNAME")
             {
                $starters.UserName = $result.indexof("USERNAME");
                $starters.ID = $result.indexof("ID");
                $starters.State = $result.indexof("STATE");
                $starters.Type = $result.indexof("TYPE");
                $starters.Device = $result.indexof("DEVICE");
                continue;
             }

             New-Object psobject -Property @{
                "SessionName" = $result.trim().substring(0, $result.trim().indexof(" ")).trim(">");
                "Username" = $result.Substring($starters.Username, $result.IndexOf(" ", $starters.Username) - $starters.Username);
                "ID" = $result.Substring($result.IndexOf(" ", $starters.Username), $starters.ID - $result.IndexOf(" ", $starters.Username) + 2).trim();
                "State" = $result.Substring($starters.State, $result.IndexOf(" ", $starters.State)-$starters.State).trim();
                "Type" = $result.Substring($starters.Type, $starters.Device - $starters.Type).trim();
                "Device" = $result.Substring($starters.Device).trim()
             }
          } 
          catch 
          {
             $e = $_;
             Write-Log "ERROR: " + $e.PSMessageDetails
          }
       }
    }

    Ensure-LogFilePath($ENV:LOCALAPPDATA + "\DisconnectedSessions")
    $LogFile = $ENV:LOCALAPPDATA + "\DisconnectedSessions\" + "sessions_" + $([DateTime]::Now.ToString('yyyyMMdd')) + ".log"

    [string]$IncludeStates = '^(Disc)$'
    Write-Log -Message "Disconnected Sessions CleanUp"
    Write-Log -Message "============================="
    $DisconnectedSessions = Get-Sessions | ? {$_.State -match $IncludeStates -and $_.UserName -ne ""} | Select ID, UserName
    Write-Log -Message "Logged off sessions"
    Write-Log -Message "-------------------"
    foreach ($session in $DisconnectedSessions)
    {
       logoff $session.ID
       Write-Log -Message $session.Username
    }
    Write-Log -Message " "
    Write-Log -Message "Finished"  

संपादित करें:
मैंने मूल रूप से इस स्क्रिप्ट का उपयोग लॉग-ऑफ और सभी "डिस्कनेक्ट" सत्रों को बंद करने के लिए किया था। हमारे पास कई उपयोगकर्ताओं और सीमित लाइसेंस के साथ टर्मिनल सर्वर एप्लिकेशन हैं। डिस्कनेक्ट किए गए सत्र बहुत लंबे समय तक खुले रहेंगे और कभी-कभी यह अनिश्चित काल तक खुले रहेंगे। इसका उपयोग अप्रयुक्त सत्रों में हुआ, जो कुछ लाइसेंस और अन्य उपयोगकर्ताओं को ले लेंगे और फिर परिणामस्वरूप नहीं जुड़ पाएंगे।

  • मैं
    अपने कुछ सर्वरों पर नियमित रूप से सत्रों की जांच करने और डिस्कनेक्ट करने के लिए एक निर्धारित कार्य का उपयोग करके स्क्रिप्ट चलाता हूं। यह
    बिना किसी सहभागिता के स्वायत्तता से काम करता है ।
  • मैं इसका उपयोग विंडोज 2008 R2 सर्वर और विंडोज 2012 R2 सर्वर ऑपरेटिंग सिस्टम पर करता हूं।
  • यह केवल सत्र बंद करता है जिसे काट दिया गया था।
  • यह उपयोगकर्ताओं या सत्रों के साथ एक 'लॉग' फ़ाइल को अपडेट करता है जिसे उसने काट दिया था।

क्या आप बता सकते हैं कि यह क्या करता है?
कोनराड गजवेस्की

1
हाय कोनराड, मैंने जवाब को थोड़ा संपादित किया और आशा है कि यह समझाता है कि स्क्रिप्ट क्या करती है। मूल रूप से स्क्रिप्ट उन सभी डिस्कनेक्ट किए गए सत्रों को बंद कर देती है जो सर्वर से दूरस्थ उपयोगकर्ता के डिस्कनेक्ट होने के बाद खुले रहते हैं।
९९ ५३-डिव -३

0

हो सकता है कि लॉगऑफ़ प्रक्रिया को अवरुद्ध करते हुए अभी भी एक प्रक्रिया चल रही हो। प्रभावित उपयोगकर्ता के लिए अभी भी चल रही प्रक्रियाओं की जाँच करें। फिर डायन को देखने के लिए एक-एक करके प्रक्रिया को मारें जिससे समस्या पैदा हो।

HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Runरजिस्ट्री कुंजी की भी जांच करें जो केवल आवश्यक प्रक्रियाएं शुरू की गई हैं। 64bit में यह है HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\Windows\CurrentVersion\Run


0

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


0

बिल्कुल वैसा ही माहौल नहीं (हमारे पास 2012r2 है) लेकिन हाइपर- V वर्चुअल मशीन प्रबंधन सेवा (VMMS) को फिर से शुरू करके मेरे लिए कनेक्शन जारी कर दिया।


0

आपको सभी उपयोगकर्ताओं से प्रक्रिया पर क्लिक करने और प्रक्रिया दिखाने की आवश्यकता है और फिर आप डिस्कनेक्ट कर पाएंगे।

दूरस्थ डेस्कटॉप सत्र होस्ट कॉन्फ़िगरेशन अंत डिस्कनेक्ट या निष्क्रिय सत्र को कुछ अंतराल के बाद सत्र नीति बनाने के लिए क्यों नहीं।


0

मेरा फिक्स: कंप्यूटर प्रबंधन उपकरण के माध्यम से समस्या सर्वर से जुड़े एक अलग नेटवर्क पर, खुले सत्रों में मैंने राइट क्लिक किया और हर खुली फाइल को बंद कर दिया, फिर mstsc के माध्यम से कनेक्ट करने में सक्षम था


0

आप हमेशा अपने स्थानीय मशीन से पावरशेल का उपयोग कर सकते हैं और इसे दूरस्थ रूप से कर सकते हैं

Invoke-command -computername <servername> -Credential (get-credential) { 
    $session = ((quser | ? { $_ -match <username> }) -split ' +' )[2]
    logoff $session
} 

अपने उत्तर को और अधिक उपयोगी बनाने के लिए यह कमांड कैसे काम करता है, इसकी एक बुनियादी व्याख्या प्रदान करने में मददगार होगी। इसे समझने के लिए PowerShell के साथ सभी को पर्याप्त अनुभव नहीं किया जा सकता है। योगदान के लिए धन्यवाद।
मैं कहता हूं कि मोनिका

-1

दुर्भाग्य से। मेरा उपयोगकर्ता सत्र काट दिया गया था। कार्य प्रबंधक ने उपयोगकर्ता के रूप में चलने वाली किसी भी प्रक्रिया को नहीं दिखाया। मैं उपयोगकर्ता को कार्य प्रबंधक से लॉग नहीं कर सका। मैंने सत्र आईडी कमांड को रीसेट करने की कोशिश की और साथ ही फ्रीज को समाप्त कर दिया। मुझे एक अलग सत्र में प्रशासक के रूप में लॉग इन करना पड़ा, खाता हटाना और एक नया निर्माण करना।


-1

क्या आपने डे रिमोट डेस्कटॉप सर्विसेज मैनेजर से डे यूजर को लॉगऑफ करने की कोशिश की है? प्रशासनिक उपकरण -> दूरस्थ डेस्कटॉप सेवा -> दूरस्थ डेस्कटॉप सेवा प्रबंधक पर जाएं और डी सत्र को लॉग ऑफ करें। यह काम कर सकता है।


-1

विंडो शुरू करने के लिए जाएं और अपने नाम पर क्लिक करें

यहां देखें नमूना


मुझे लगता है कि यह यहां कई अन्य उत्तरों में से एक है (जिनमें से अधिकांश अधिक विस्तृत हैं) - जैसे serverfault.com/a/804638/402709 । यह कुछ संदर्भ और अपने स्वयं के अनुभव के साथ इसका विस्तार करने में आपके उत्तर को बेहतर बनाने में मदद कर सकता है।
इवासेनबीबाग्रे

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