WinRS远程登录后,PowerShell脚本无法切换目录执行Java文件求助
问题分析与解决方法
你的脚本存在核心问题:后面两条powershell.exe -c命令都是在本地PowerShell进程中执行的,并没有进入winrs启动的远程cmd会话。winrs /r:... cmd.exe会启动一个交互式远程cmd窗口,后续命令不会自动接入这个会话,而是独立在本地运行,自然无法操作远程主机的目录和程序。
正确解决方案
方案1:串联远程命令一次性执行
把需要在远程主机执行的命令用&&连接,通过winrs直接远程执行,无需进入交互式会话:
# 设置信任主机(仅需执行一次,可单独运行) powershell.exe -c "winrm set winrm/config/client '@{TrustedHosts=remoteHostServer}'" # 远程切换目录并运行Java程序 powershell.exe -c "winrs /r:remoteHostServer /username:admin /password:xxxxxx 'cd C:\test && java test.java'"
方案2:通过本地脚本批量执行远程命令
如果要执行多条复杂命令,可先把命令写入本地cmd脚本,再通过winrs远程调用:
- 本地创建
remote_tasks.cmd文件,内容如下:
cd C:\test java test.java
- 修改PowerShell脚本:
powershell.exe -c "winrm set winrm/config/client '@{TrustedHosts=remoteHostServer}'" # 替换为你本地remote_tasks.cmd的实际路径 powershell.exe -c "winrs /r:remoteHostServer /username:admin /password:xxxxxx 'cmd /c C:\local_path\remote_tasks.cmd'"
额外注意事项
- 脚本中明文写密码存在安全风险,建议改用
Get-Credential获取凭据,或配置WinRM凭据缓存避免硬编码。 - 如果远程主机的Java未加入系统环境变量,需写全Java.exe的绝对路径,例如:
"cd C:\test && C:\Program Files\Java\jdk1.8.0_301\bin\java.exe test.java"
内容的提问来源于stack exchange,提问作者RDX
相关产品推荐
相关产品推荐

