Kev*_*Kev 4 remote-access windows powershell pstools
我正在尝试使用PSEXEC. PowerShell 脚本通过.cmd批处理文件调用。我们这样做的原因是更改执行策略,运行 powershell 脚本然后再次重置执行策略:
在远程服务器上do-tasks.cmd看起来像:
powershell -command "&{ set-executionpolicy unrestricted}"
powershell DoTasks.ps1
powershell -command "&{ set-executionpolicy restricted}"
Run Code Online (Sandbox Code Playgroud)
PowerShell 脚本DoTasks.ps1现在只是这样做:
Write-Output "Hello World!"
Run Code Online (Sandbox Code Playgroud)
这两个脚本都存在于c:\windows\system32(目前)中,因此它们位于 PATH 中。
在原始服务器上,我这样做:
psexec \\web1928 -u administrator -p "adminpassword" do-tasks.cmd
当它运行时,我在命令行收到以下响应:
c:\Windows\system32>powershell -command "&{ set-executionpolicy unrestricted}"
并且脚本不再运行。
我不能按 ctrl-c 来破坏脚本,我只能看到 ^C 字符,我可以从键盘输入输入,字符会回显到控制台。
在远程服务器上,我看到 PowerShell.exe 和 CMD.exe 正在任务管理器的进程选项卡中运行。如果我结束这些进程,那么控制将返回到原始服务器上的命令行。
我已经用一个简单的.cmd批处理文件尝试了这个,@echo hello world它工作得很好。
do-tasks.cmd通过 RDP 会话在远程服务器上运行也可以正常工作。
原始服务器运行 Windows 2003 SP2,远程服务器运行 Windows 2008 SP2。
为什么我的远程批处理文件在通过执行时卡住了PSEXEC?
小智 11
这是 POSH 的常见问题。问题是stdin挂起。尝试这个:
c:\Windows\system32>powershell -command "&{ set-executionpolicy unrestricted}" < NUL
Run Code Online (Sandbox Code Playgroud)
小智 5
论坛中的大多数答案都通过回显和管道等解决方法解决了这个问题,以便 powershell 从 STDIN 获得一些输入。
但是在powershell中存在一个解决方案。只需使用选项 -inputformat none 启动 powershell,例如:
powershell -inputformat none -command ...
Run Code Online (Sandbox Code Playgroud)
这通过 psexec 解决了 Win2003 和 Win2008 的挂起问题。