没有RDP时自动发送密钥失败

Dav*_*son 5 vmware remote-desktop sendkeys

我有一个我希望运行自动化任务的VM(即自动化任务在实际VM上运行).

VM是Windows 2008服务器.

我已将任务添加到任务计划程序中,当我通过RDP登录计算机时,我可以通过右键单击"运行"来运行任务.

但是,当我的RDP会话关闭时(但VM上的用户仍然登录)该任务尝试运行,但只打开notepad.exe,但不会写入文本.

vbs脚本如下(我们在这里使用简化...);

Set objShell = WScript.CreateObject("WScript.Shell")
objShell.Run "Notepad.exe"
Do Until Success = True
Success = objShell.AppActivate("Notepad")
Wscript.Sleep 1000
Loop
objShell.SendKeys "This is a test."
Run Code Online (Sandbox Code Playgroud)

我有这项任务在Windows XP机器上完美运行,我只是无法理解导致问题的原因.

当没有通过RDP连接时,似乎VM上没有找到键盘.当通过RDP连接时,MSTSC将VM发送到我的键盘,然后可以正确运行任务.

谢谢,

大卫

Dav*_*son 6

好的,

所以我想我想通了...

问题是,一旦您使用远程桌面注销,服务器就会被锁定,无法运行任何脚本。我尝试了各种选项,包括 ControlSend 和 ControlClick 命令,但都没有成功。

解决方法如下: 用下面的命令创建一个批处理文件并保存到你要保持解锁状态的工作站桌面上: 我已经将我的文件命名为Logoff.bat

START C:\Windows\System32\tscon.exe 0 /dest:console
START C:\Windows\System32\tscon.exe 1 /dest:console
START C:\Windows\System32\tscon.exe 2 /dest:console
START C:\Windows\System32\tscon.exe 2 /dest:console
START C:\Windows\System32\tscon.exe 3 /dest:console
START C:\Windows\System32\tscon.exe 4 /dest:console
START C:\Windows\System32\tscon.exe 5 /dest:console
Run Code Online (Sandbox Code Playgroud)

Tscon.exe 是 Windows 安装的标准配置,专门用于使先前锁定的控制台处于解锁状态。请参阅此链接:http : //support.microsoft.com/kb/302801

下次使用远程桌面登录工作站时,不要以正常方式注销,而是运行批处理文件 - 在我的情况下为“Logoff.bat”这将终止您的远程桌面连接并将您注销,但随后继续以解锁状态运行任何脚本,就好像有人实际登录一样。