首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 程式設計綜合問答

局域網批量遠程啟動程序:PsExec 替代 VBS 實現跨機器執行

     編輯:程式設計綜合問答

需求:一鍵在多台機器運行指定腳本

已知:局域網機器常開、知用戶名/密碼(如 Administrator/123456)。目標:從機器 A 批量啟動機器 B 的 C:\b.vbs、機器 C 的 C:\c.vbs。

為什麼不推薦 VBS/PowerShell Remoting?

  • VBS WScript.Shell 無原生遠程執行能力,需配置 DCOM、防火牆、WMI 權限,極易卡在「拒絕訪問」。
  • PowerShell Remoting 需啟用 WinRM、配置 TrustedHosts、雙跳認證,環境依賴重。

最佳工具:Sysinternals PsExec

微软官方輕量工具,單文件 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先複製程序到目標機再執行(腳本不在遠端路徑時用)

進階:C# 封裝 PsExec 實現 GUI 批量控制

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
    }
}

安全提示

  • 僅在受信任局域網使用,避免明文密碼洩露
  • 生產環境建議構建域環境,使用 Kerberos 委派免密碼
  • 腳本內容需審計,防止惡意代碼橫向移動

總結

拋棄自研遠程執行方案,PsExec 是局域網批量運維的標準答案。配合批處理/PowerShell/C# 封裝,幾分鐘搞定「一鍵啟動 N 台機器跑腳本」。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved