2013-01-17 25 views
5

क्या कोई शक्तिशक्ति कमांड है जिसका उपयोग मैं सर्वर से "डिस्कनेक्ट" उपयोगकर्ताओं को लात मारने के लिए कर सकता हूं? एक बार जब मैं एक एकल उपयोगकर्ता को मारने के लिए एक पंक्ति को जानता हूं तो मैं स्क्रिप्ट लिख सकता हूं।पावरहेल कमांड को सर्वर से डिस्कनेक्ट करने वाले उपयोगकर्ताओं को लात मारने के लिए

उदाहरण के लिए, मैं नीचे दिए गए संवाद में देखे गए 8 उपयोगकर्ताओं को लात मारना चाहता हूं।

enter image description here

उत्तर

3

मेरी राय में, सबसे आसान तरीका है logoff.exe कि पहले से ही आपकी मशीन पर मौजूद उपयोग करने के लिए किया जाएगा। उदाहरण के अपने स्क्रीनशॉट में पहली कट उपयोगकर्ता लॉग ऑफ करने के लिए:

logoff 3 /server:YOURSERVERNAME 
8

मैं यह कोशिश नहीं कर सकते हैं:

$pc = qwinsta /server:YourServerName | select-string "Disc" | select-string -notmatch "services" 

if ($pc) 
{ 
    $pc| % { 

    logoff ($_.tostring() -split ' +')[2] /server:YourServerName 

    } 
} 
+0

मुझे लगता है कि – EBGreen

+0

काम करना चाहिए, मैं इसे स्थानीय रूप से आईटी विभाग (एक लंबी कहानी) के लिए 'कियोस्क-जैसे' सर्वर में उपयोग करता हूं और यह काम करता है। कभी भी परीक्षण नहीं किया, लेकिन मुझे लगता है कि मैं भी काम कर सकता हूं। –

+0

@ सीबी-आई हाल ही में एक ही मुद्दे में भाग गया जहां मुझे लॉग इन करने की ज़रूरत है सभी डिस्कनेक्ट किए गए उपयोगकर्ताओं को बंद करें .. तो क्या आप मुझे यह कह सकते हैं कि इसे कैसे कार्यान्वित किया जाए और जहां हाल ही में मैंने एक प्रश्न पूछा है http://stackoverflow.com/ प्रश्न/183775 9 2/प्राप्त-डिस्कनेक्ट-उपयोगकर्ता-और-लॉगऑफ-उन्हें? – coder

1

ये रहा:

@echo off 
(set STATE=Disconnected) 
REM !! IMPORTANT set length in 4th from last line !! 

FOR /f "Skip=1 tokens=3,4" %%i in ('qwinsta') do (
IF /I NOT "%%i"=="The" (
call :checkpath %%i "%%j" 
) 
) 
::pause 
GOTO :EOF 

:checkpath 
set id=%1 
set STATUS=%~2 
:: !! The last number in the next line needs to 
:: be the length of the STATE string 

SET root=%STATUS:~0,12% 
IF /I NOT "%ROOT%"=="%STATE%" GOTO :EOF 
@echo on 
Session ID %ID% is %STATUS%. Logging off... 
@echo off 
logoff %ID% /server:YOURSERVERNAME 
+0

अच्छा जवाब! क्या आप आगे बता सकते हैं कि कुछ चर, जैसे स्टेटस का प्रतिनिधित्व कर रहे हैं? –

+1

राज्य - देखने के लिए मूल्य (डिस्कनेक्ट); स्थिति - qwinsta द्वारा लाए गए राज्य का मूल्य; आईडी - wqinsta द्वारा लाए गए आईडी का मूल्य; रूट - स्टेटस –

+1

का पहला 12 अक्षर मूल रूप से इस स्क्रिप्ट का उपयोग निर्देशिका द्वारा खुली फ़ाइलों को बंद करने के लिए किया गया था, इसलिए वर्तमान कार्य के लिए कुछ चीजें वास्तव में कुछ भी नहीं कर रही हैं –

2

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

$serverName = "Name of server here OR localhost" 
$sessions = qwinsta /server $serverName| ?{ $_ -notmatch '^ SESSIONNAME' } | %{ 
$item = "" | Select "Active", "SessionName", "Username", "Id", "State", "Type", "Device" 
$item.Active = $_.Substring(0,1) -match '>' 
$item.SessionName = $_.Substring(1,18).Trim() 
$item.Username = $_.Substring(19,20).Trim() 
$item.Id = $_.Substring(39,9).Trim() 
$item.State = $_.Substring(48,8).Trim() 
$item.Type = $_.Substring(56,12).Trim() 
$item.Device = $_.Substring(68).Trim() 
$item 
} 

foreach ($session in $sessions){ 
    if ($session.Username -ne "" -or $session.Username.Length -gt 1){ 
     logoff /server $serverName $session.Id 
    } 
} 

इस स्क्रिप्ट की पहली पंक्ति में $ Server को उचित मूल्य या स्थानीयहोस्ट स्थानीय रूप से चलने पर नाम दें। मैं स्वचालित रूप से कुछ फ़ोल्डर्स को स्थानांतरित करने के प्रयासों से पहले उपयोगकर्ताओं को लात मारने के लिए इस स्क्रिप्ट का उपयोग करता हूं। मेरे लिए "उपयोग में फ़ाइल" त्रुटियों को रोकता है। एक और नोट, इस स्क्रिप्ट को व्यवस्थापक उपयोगकर्ता के रूप में भागना होगा अन्यथा आप किसी को लॉग आउट करने का प्रयास करने से इनकार कर सकते हैं। उम्मीद है की यह मदद करेगा!