我正在为我上学的学校写一个远程注销工具。作为系统管理员,我们在校园实验室关闭后使用它来注销用户,以确保所有计算机在晚上都能获得更新。使用Windows 7,我们现在可以正常工作。但我们正在为所有机器更新到Windows 10,并且该工具神秘地停止运行。它是在VB.net中编写的(如果需要,可以更改为c#)。目前,我们有两个主要功能:
Private Sub LogOut()
Dim AdminAccount As String = txtUsr.Text
Dim AdminDomain As String = txtDomain.Text
Dim AdminPassword As String = txtPwd.Text
Dim ShutDownLocal As String = "c:\bin\"
Dim LogOutProgram As String = "c:\bin\Logout.cmd"
Dim TargetMachine As String = cboDom.Text & ComboBox1.Text & "p" & txtMachine.Text & txtDomain.Text
Dim ShutDownCommand As String = "shutdown -t 300 /r /m \\" & TargetMachine
If RunAs.RunAs(AdminAccount, AdminPassword, AdminDomain, ShutDownCommand, ShutDownLocal) Then
Status.Text = "5 Minute Logout sent to machine"
End If
End Sub
和
Public Shared Function RunAs(ByVal UserName As String, _
ByVal Password As String, _
ByVal DomainName As String, _
ByVal CommandLine As String, _
ByVal StartIn As String) As Boolean
Dim iRet As Integer
Dim si As New STARTUPINFO
Dim pi As PROCESS_INFORMATION
si.cb = Marshal.SizeOf(si)
si.wShowWindow = 0
iRet = CreateProcessWithLogonW(UserName, DomainName, Password, _
LOGON_WITH_PROFILE, Nothing, CommandLine, _
NORMAL_PRIORITY_CLASS, 0, StartIn, si, pi)
If iRet = 0 Then
MessageBox.Show("Password incorrect.", "Error")
Return False
Else
CloseHandle(pi.hThread)
CloseHandle(pi.hProcess)
Return True
End If
End Function
目前在Windows 7计算机上此功能绝对正常但是在Windows 10计算机上尝试它时,我们要么“访问被拒绝(5)”或“输入的计算机名称无效,或者目标计算机不支持远程关闭”。检查名称,然后重试或联系您的系统管理员。(53)“
我已经与管理员核实过,他说它已启用。我们使用域级防火墙,因此各个计算机不会拒绝连接。每台计算机都具有相同的管理员组(我每次尝试都使用凭据)。我不确定任何其他解决方案。对于文本墙感到抱歉,任何解决方案都可以在大多数情况下进行测试。不幸的是没有第三方软件。
谢谢!