使用PSExec远程运行system权限批处理脚本及定时任务咨询
需求可行性结论
完全可以实现,以下是可直接落地的操作步骤和注意事项。
单次远程以SYSTEM身份执行bat脚本的实现方法
首先确认前置条件满足:
- 运行psexec的本地账号,对远程目标计算机拥有本地管理员权限
- 远程计算机默认开启
Admin$管理共享,且防火墙放行了「文件和打印机共享」规则,否则psexec无法建立连接
直接执行以下命令即可完成单次调用:
psexec \\远程主机IP/主机名 -s -accepteula -u 远程机管理员账号 -p 对应密码 -c -f 本地bat脚本的完整路径
参数说明:
-s:指定进程以SYSTEM系统权限运行,完全匹配你的权限要求-accepteula:自动同意psexec的最终用户许可协议,避免无人值守运行时卡交互弹窗-c:自动将本地的bat脚本拷贝到远程机临时目录执行,无需手动提前传文件-f:强制覆盖远程机临时目录下的同名文件,避免旧版本脚本干扰执行- 如果已经提前把bat脚本存到远程机固定路径,可以去掉
-c -f参数,直接在命令末尾写远程机上的bat完整路径即可,示例:psexec \\192.168.3.20 -s -accepteula -u .\administrator -p P@ssw0rd C:\ops\check_task.bat
每隔X天自动运行的配置方案
有两种成熟方案可选,根据实际场景挑选即可:
方案1:在本地执行机配置计划任务(配置最简便)
直接在运行psexec命令的本地机器上新建Windows计划任务:
- 打开「任务计划程序」,选择「创建任务」
- 安全选项选择拥有远程管理权限的本地/域账号,勾选「不管用户是否登录都要运行」
- 触发器新建为「按计划运行」,设置重复周期为你需要的X天间隔
- 操作选择「启动程序」,程序路径填psexec.exe的完整本地路径,参数填之前调试通过的psexec执行参数即可
- 配置完成后手动跑一次任务,确认能正常触发执行、无报错即可
方案2:在远程目标机配置计划任务(可靠性更高)
如果不想依赖本地执行机长期开机、网络连通,可以第一次通过psexec连接远程机后,直接在远程机上新建计划任务:
- 任务运行身份直接选
SYSTEM - 触发器同样设置为每X天触发
- 操作直接选择远程机本地存储的bat脚本路径
这种方案不需要每次执行都走远程psexec调用,不受本地机状态、跨网络连通性波动影响,稳定性更好。
常见踩坑提醒
- SYSTEM身份运行的脚本默认在会话0中,不要在脚本里写需要用户交互的弹窗、输入类逻辑,否则会直接卡住进程无法继续
- 命令行明文写管理员密码有安全风险,生产环境建议提前把远程机的访问凭据存到Windows凭据管理器,psexec会自动调用,不需要在参数里明文传-p和密码
- 如果执行报网络相关错误,先手动在资源管理器访问
\\远程主机IP\Admin$,确认能正常打开、权限正常后再调试psexec命令 - 如果不需要等待脚本执行完成再返回结果,可以给psexec加
-d参数,启动远程进程后本地命令直接退出,适合长时间运行的脚本场景
内容的提问来源于stack exchange,提问作者Steven B
相关产品推荐
相关产品推荐

