如何让多远程机器并行执行批处理脚本?优化pskill64连接耗时
多台远程机器批量操作优化方案
针对你提出的两个核心问题(串行执行效率低、重复建立连接耗时),以下是具体优化方案:
一、解决串行执行问题:实现多机器并行操作
Windows批处理中可通过start /B命令启动独立后台进程,让每台远程机器的操作任务同时执行,无需等待上一台完成。
二、解决重复连接问题:减少认证次数、合并进程终止操作
- 合并进程终止操作:用
taskkill替代多次调用pskill64,一次命令即可终止多个目标进程,避免重复建立连接。 - 提前建立共享连接:先通过
NET USE建立远程机器的共享连接,后续操作复用该连接,无需重复传入用户名密码。
优化后的完整脚本
@echo off setlocal enabledelayedexpansion set "uname=domain\admin" set "pword=" :: 读取远程机器列表,为每台机器启动独立后台任务 FOR /F "tokens=* delims=" %%i in (list1.txt) DO ( start /B cmd /c ^ "echo 开始处理机器: %%i && ^ :: 提前建立共享连接,复用认证信息 NET USE \\%%i\C$ /u:!uname! !pword! && ^ NET USE \\%%i\D$ /u:!uname! !pword! && ^ :: 一次性终止多个进程,替代多次pskill taskkill /S %%i /F /IM java.exe /IM javaw.exe /IM edge.exe && ^ :: 复制文件,复用已建立的共享连接 xcopy "\\%%i\C$\Users\tcserv\Downloads\PSTools\fileToBeCopied.txt" "\\%%i\D$\APP\APPRoot\Runtime" /Y && ^ :: 执行注册批处理 psexec64 \\%%i "D:\APP\APPRoot\Runtime\register.bat" && ^ :: 清理共享连接(可选) NET USE \\%%i\C$ /DELETE /Y && ^ NET USE \\%%i\D$ /DELETE /Y && ^ echo 机器%%i处理完成" ) echo 所有后台任务已启动,请等待执行完成。 pause
脚本说明
start /B:启动后台进程,不打开新窗口,实现多机器并行处理。taskkill /S %%i /F /IM ...:远程强制终止多个进程,一次命令完成,减少连接次数。NET USE提前建立C$和D$的共享连接,后续xcopy、psexec都会复用该连接的认证信息,无需重复传入用户名密码。setlocal enabledelayedexpansion:确保循环中变量!uname!和!pword!能正确解析。/Y参数:在xcopy和NET USE删除时自动确认,避免交互等待。
内容的提问来源于stack exchange,提问作者Swamy
相关产品推荐
相关产品推荐

