2008-10-21 82 views
1

我需要能够从程序中从他的Windows会话中注销任何用户。远程和以编程方式注销活动域用户

我知道我可以作为管理员登录并强制远程注销。有没有其他方法可以在不登录的情况下强制注销?

该工具将作为管理员运行,因此这不是问题,可以在不登录的情况下进行远程注销。

工具是.NET,但任何其他方式都欢迎(JScript中,命令行工具从PInvoke的运行等)

回答

3

也许与Sysinternals的PsTools,特别PsShutdown

+0

是的,这似乎工作过。 – 2008-10-21 14:58:36

1

终于找到了这个脚本在此页:http://www.robvanderwoude.com/files/logoff_vbs.txt

我决定把它存为工具内部的串并使其它写入磁盘,执行它并删除它。不是特别优雅(是的,是的,就像地狱般丑陋),但现在足够好了。

' 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 
0

你可以使用简单的命令行从任何远程用户强行注销如下

C:\>psexec \\remotepc shutdown /f /l