Ferne und programmatisch abzumelden eine aktive Domäne user
-
03-07-2019 - |
Frage
Ich muss in der Lage, jeden Benutzer aus seinem Fenster-Sitzung von einem Programm abzumelden.
Ich weiß, dass ich als admin einloggen konnte und einen Remote-Abmelde erzwingen. Gibt es eine andere Art und Weise eine Abmelde ohne Anmeldung zu erzwingen?
Das Tool als Administrator ausgeführt werden, so dass kein Problem ist, an die Remote-Abmeldung in der Lage, ohne sich anzumelden ist.
Tool ist in .NET, aber jede andere Art und Weise ist willkommen (JScript, Kommandozeilen-Tool von PInvoke zu laufen, usw.)
Lösung
Vielleicht mit Sysinternals' PsTools , insbesondere PsShutdown ?
Andere Tipps
Schließlich fand in dieser Seite dieses Skript aus: http://www.robvanderwoude.com/ files / logoff_vbs.txt
habe ich beschlossen, es als eine Zeichenfolge innerhalb des Werkzeugs zu speichern und auf die Festplatte schreiben lassen, führen Sie es aus und löschen. Nicht besonders elegant (ja, ja, hässlich wie die Hölle), aber gut genug für heute.
' Logoff.vbs, Version 1.00
' Logoff current user on any WMI enabled computer on the network
'
' Adapted from posts by Alex Angelopoulos on www.developersdex.com
' and Michael Harris on microsoft.public.scripting.vbscript
'
' Written by Rob van der Woude
' http://www.robvanderwoude.com
' Check command line parameters
Select Case WScript.Arguments.Count
Case 0
' Default is local computer if none specified
strComputer = "."
Case 1
Select Case WScript.Arguments(0)
' "?", "-?" or "/?" invoke online help
Case "?"
Syntax
Case "-?"
Syntax
Case "/?"
Syntax
Case Else
strComputer = WScript.Arguments(0)
End Select
Case Else
' More than 1 argument is not allowed
Syntax
End Select
' Define some constants that can be used in this script;
' logoff = 0 (no forced close of applications) or 5 (forced);
' 5 works OK in Windows 2000, but may result in power off in XP
Const EWX_LOGOFF = 0
Const EWX_SHUTDOWN = 1
Const EWX_REBOOT = 2
Const EWX_FORCE = 4
Const EWX_POWEROFF = 8
' Connect to computer
Set OpSysSet = GetObject("winmgmts:{(Shutdown)}//" & strComputer & "/root/cimv2").ExecQuery("select * from Win32_OperatingSystem where Primary=true")
' Actual logoff
for each OpSys in OpSysSet
OpSys.Win32Shutdown EWX_LOGOFF
next
' Done
WScript.Quit(0)
Sub Syntax
msg = vbCrLf & "Logoff.vbs, Version 1.00" & vbCrLf & _
"Logoff the current user of any WMI enabled computer on the network." & _
vbCrLf & vbCrLf & "Usage: CSCRIPT LOGOFF.VBS [ computer_name ]" & _
vbCrLf & vbCrLf & _
"Where: " & Chr(34) & "computer_name" & Chr(34) & _
" is the name of the computer to be logged off" & vbCrLf & _
" (without leading backslashes); default is " & _
Chr(34) & "." & Chr(34) & vbCrLf & _
" (the local computer)." & vbCrLf & vbCrLf & _
"Written by Rob van der Woude" & vbCrLf & _
"http://www.robvanderwoude.com" & vbCrLf & vbCrLf & _
"Based on posts by Alex Angelopoulos on www.developersdex.com" & _
vbCrLf & _
"and Michael Harris on microsoft.public.scripting.vbscript" & vbCrLf
Wscript.Echo(msg)
Wscript.Quit(1)
End Sub
Sie können einfache Befehlszeile verwenden, gewaltsam von jedem entfernten Benutzer, wie unten
abzumeldenC:\>psexec \\remotepc shutdown /f /l