adj*_*uzy 3 windows batch-file psexec
我正在尝试强制VM将当前用户注销,并通过运行.bat脚本将会话发送到控制台.
如果我.bat在VM上手动运行包含以下内容的文件,我可以正常工作:
%windir%\System32\tscon.exe 0 /dest:console
Run Code Online (Sandbox Code Playgroud)
但是,使用psexec或paexec调用时.bat:
c:\>psexec.exe \\virtualmachine -u domain\username -p password -h cmd /c
c:\user\atest\desktop\test.bat
Run Code Online (Sandbox Code Playgroud)
我被拒绝访问:
无法将sessionID 0连接到会话名称控制台,错误代码5错误[5]:访问被拒绝.C:\ windows\system32\tscon.exe在virtualmachine上退出,错误代码为1.
或者,我尝试过(相同的结果):
C:\>PsExec.exe \\virtualmachine -u domain\username -p password -h
C:\windows\system32\tscon.exe 0 /dest:console
Run Code Online (Sandbox Code Playgroud)
我不确定我哪里出错了,因为这开始iexplore.exe很好:
C:\>PsExec.exe \\virtualmachine -u domain\username -p password -h "c:\program files\internet explorer\iexplore.exe"
Run Code Online (Sandbox Code Playgroud)
小智 6
我有一个批处理文件,多年来一直在结束 RDP 会话并保持主机屏幕解锁,它有 sessionid 的 0 到 10 的条件,以防万一。然后本周,在加载 Windows 更新后,它停止工作,并且我在批处理文件的结果中不断收到 7045 错误。RDP 会话将关闭,但主机屏幕已锁定。主机运行留言板,因此这是不可接受的,并且机器安装在天花板上,因此无法使用鼠标或键盘。
我进行了大量搜索,发现没有任何东西可以多次起作用(如果它真的有效的话)。然后我偶然发现了这个,当我运行这个 power shell 命令时,我的问题就解决了。到目前为止,它工作得很好,而且更好,但您不必知道会话 ID 或名称,也不必在文本或批处理文件中传递密码。
@powershell -NoProfile -ExecutionPolicy unrestricted -Command "$sessionid=((quser $env:USERNAME | select -Skip 1) -split '\s+')[2]; tscon $sessionid /dest:console" 2> UnlockErrors.log
只需将脚本复制到文本文件中,将其重命名为 Something.cmd,然后在主机桌面上创建它的快捷方式,然后转到属性并选择高级并以管理员身份运行。简单的。适用于win7专业版。我在这里找到了脚本https://steamcommunity.com/groups/homestream/discussions/0/617335934139051123/?ctp=5
问题是因为用户是通过RDP连接的,它不是会话0.我必须运行"查询用户"来获取RDP连接的会话ID,然后使用"-i"将其传递给PsExec,如下所示:
C:\>PsExec.exe -s -i $id \\virtualmachine c:\windows\system32\tscon.exe $id /dest:console
Run Code Online (Sandbox Code Playgroud)
因为它作为系统(-s)运行,所以我不需要传递任何身份验证.
这个答案帮助我了解会话的概念,希望它能帮助别人.