已知:局域網機器常開、知用戶名/密碼(如 Administrator/123456)。目標:從機器 A 批量啟動機器 B 的 C:\b.vbs、機器 C 的 C:\c.vbs。
WScript.Shell 無原生遠程執行能力,需配置 DCOM、防火牆、WMI 權限,極易卡在「拒絕訪問」。微软官方輕量工具,單文件 PsExec.exe,無需安裝服務端,通過 ADMIN$ 共享推送服務執行。
下載:PsExec 官方頁面
REM 單機執行
PsExec.exe \\192.168.1.10 -u Administrator -p 123456 -h -d cscript.exe C:\b.vbs
REM 批量執行(從 ip.txt 讀取 IP 列表)
for /f %i in (ip.txt) do PsExec.exe \\%i -u Administrator -p 123456 -h -d cscript.exe C:\scripts\%~ni.vbs
| 參數 | 作用 |
|---|---|
\\IP | 目標機器 IP/主機名 |
-u -p | 用戶名/密碼(省略則用當前上下文) |
-h | 以高權限(UAC 提權)運行 |
-d | 不等待進程結束(異步併發,關鍵!) |
-s | 以 SYSTEM 帳號運行(無需密碼,需本地管理員權限) |
-c | 先複製程序到目標機再執行(腳本不在遠端路徑時用) |
public void RunRemote(string ip, string user, string pwd, string cmd) {
var psi = new ProcessStartInfo {
FileName = "PsExec.exe",
Arguments = $@"\\{ip} -u {user} -p {pwd} -h -d {cmd}",
UseShellExecute = false,
CreateNoWindow = true,
RedirectStandardOutput = true,
RedirectStandardError = true
};
using (var proc = Process.Start(psi)) {
proc.WaitForExit(30000); // 超時保護
string output = proc.StandardOutput.ReadToEnd();
// 記錄日志、更新 UI
}
}
拋棄自研遠程執行方案,PsExec 是局域網批量運維的標準答案。配合批處理/PowerShell/C# 封裝,幾分鐘搞定「一鍵啟動 N 台機器跑腳本」。