作為一個后台程序猿,經常需要把一堆程序集(DLL)或者應用程序(EXE)復制到多個服務器上,實現程序的代碼邏輯更新,用以測試新的功能或改動邏輯。這里給大家介紹一個自己實現的PowerShell腳本,方便大家替換DLL或者EXE到多個Windows機器上。
一. 腳本用途
用於方便復制多個文件到多個服務器上。

二. 腳本功能
腳本的主要功能如下:
- 支持通過最后修改時間過濾文件,設定時間之前的文件不進行復制操作(邏輯設計源於Rebuild代碼后只替換新Build出來的有改動的文件);
- 支持多文件夾多文件復制,文件夾和文件路徑支持通配符;
- 通過配置文件,支持復制文件前停到相關Windows服務或進程,復制文件后還會把Windows服務啟動(邏輯設計為了避免目的端已存在的文件被相關進程占用而導致復制失敗的情況);
- 支持一次操作復制到多個服務器上;
- 支持命令行指定Computer參數,忽略配置文件中已經設置的多個服務器,只處理命令行中設置的服務器(邏輯設計為了處理這種情況:當復制到某一個目的端服務器失敗的時候,解決問題后重新執行復制特定服務器的操作);
- 通過配置文件控制,無需每次都輸入繁瑣的命令,可多次循環使用。
三. 使用方法
命令參數簡單如下,一共有三個可用參數:
- Path——配置文件路徑,必備參數;
- Credential——連接到遠程服務器的認證信息,如果傳入時不指定,會彈框強制指定;
- Computer——需要操作的遠程服務器地址或名字,如果傳入,則忽略配置文件中設置的Server字段。

配置文件格式例子如下:

其中Server填遠程服務器的地址,Service Display Name填復制文件前需要停止的Windows服務顯示名字,Process Name填需要停止的進程名字,Item是要復制的文件或文件夾,以上參數可以有多個節點。
Last Write Time填時間戳,所有修改時間在這之后的文件夾和文件都將會被復制,只能有一個。
Destination Folder填要復制到的目的端機器的文件夾路徑,如果沒有會自動創建,只能有一個。
四. 效果截圖
需要復制的源端文件夾如下:

執行命令PowerShell窗口如下:

一個目的端服務器的效果:

五. PowerShell遠程執行命令異常情況解決
使用這個腳本的時候可能會遇到一點問題,和環境配置有關,具體情況和解決方法如下:
· Running scripts is disabled on the system
如圖,執行命令的時候報錯:

解決方法:
以管理員運行Windows PowerShell,輸入如下命令允許執行腳本” Set-ExecutionPolicy -ExecutionPolicy Unrestricted”。如果不想設置成Unrestricted,具體參考Set-ExecutionPolicy。

· The remove servers are not in the local server’s WinRM TrusterHosts list
如圖,執行命令的時候報錯:

解決方法:
以管理員運行Command Prompt,輸入如下命令”winrm set winrm/config/client @{TrustedHosts="VM1,VM2"}”設置信任主機。

· The user name or password is incorrect when creating new UNC folder
盡管密碼已經確保正確了,但是遠程創建文件夾或者復制文件的時候仍然報用戶名密碼錯誤。
解決方法:
一是手動直接訪問UNC路徑,把用戶名密碼保存在系統中,二是執行如下命令” cmdkey /add:targetname /user:username /pass:password”,把用戶名密碼緩存到系統中。

· The remote servers do not have WinRM service configured
錯誤如下:

解決方法:
在目的端機器(10.2.38.53)上管理員運行Command Prompt,輸入命令”winrm quickconfig”開啟服務:

六. 部分代碼截圖
截圖1.

截圖2.

Note:腳本暫時不夠完善,完成一點功能,可能有BUG,還有更多的優化空間,比如並行執行復制命令,支持全命令參數等,以后可能會繼續更新優化。
腳本下載地址:http://files.cnblogs.com/files/lavender000/OneClickToReplaceMultipleFilesToMultipleServers.zip。
[原創文章,轉載請注明出處,僅供學習研究之用,如有錯誤請留言,如喜歡請推薦,謝謝支持]
[原文:http://www.cnblogs.com/lavender000/p/6958618.html,來自永遠薰薰]
