.net - sesión - para iniciar sesion de forma remota debes tener el derecho
desconectar remota y programáticamente un usuario de dominio activo (2)
Finalmente descubrió este script en esta página: http://www.robvanderwoude.com/files/logoff_vbs.txt
Decidí almacenarlo como una cadena dentro de la herramienta y hacer que lo escriba en el disco, ejecutarlo y eliminarlo. No particularmente elegante (sí, sí, feo como el infierno), pero lo suficientemente bueno por ahora.
'' 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
Necesito poder desconectar a cualquier usuario de su sesión de Windows de un programa.
Sé que podría iniciar sesión como administrador y forzar el cierre de sesión remoto. ¿Hay alguna otra forma de forzar un cierre de sesión sin iniciar sesión?
La herramienta se ejecutará como administrador, por lo que no hay problema, es posible desconectarse de manera remota sin iniciar sesión.
La herramienta está en .NET, pero cualquier otra forma es bienvenida (JScript, herramienta de línea de comandos para ejecutarse desde PInvoke, etc.)
Tal vez con PsTools de Sysinternals, particularmente PsShutdown ?