一鍵幫你複製多個文件到多個機器——PowerShell小腳本(內附PS遠程執行命令問題解析)

做爲一個後臺程序猿,常常須要把一堆程序集(DLL)或者應用程序(EXE)複製到多個服務器上,實現程序的代碼邏輯更新,用以測試新的功能或改動邏輯。這裏給你們介紹一個本身實現的PowerShell腳本,方便你們替換DLL或者EXE到多個Windows機器上。html

 

一.   腳本用途

用於方便複製多個文件到多個服務器上。shell

 

二.   腳本功能

腳本的主要功能以下:緩存

  • 支持經過最後修改時間過濾文件,設定時間以前的文件不進行復制操做(邏輯設計源於Rebuild代碼後只替換新Build出來的有改動的文件);
  • 支持多文件夾多文件複製,文件夾和文件路徑支持通配符;
  • 經過配置文件,支持複製文件前停到相關Windows服務或進程,複製文件後還會把Windows服務啓動(邏輯設計爲了不目的端已存在的文件被相關進程佔用而致使複製失敗的狀況);
  • 支持一次操做複製到多個服務器上;
  • 支持命令行指定Computer參數,忽略配置文件中已經設置的多個服務器,只處理命令行中設置的服務器(邏輯設計爲了處理這種狀況:當複製到某一個目的端服務器失敗的時候,解決問題後從新執行復制特定服務器的操做);
  • 經過配置文件控制,無需每次都輸入繁瑣的命令,可屢次循環使用。

 

三.   使用方法

命令參數簡單以下,一共有三個可用參數:服務器

  • Path——配置文件路徑,必備參數;
  • Credential——鏈接到遠程服務器的認證信息,若是傳入時不指定,會彈框強制指定;
  • Computer——須要操做的遠程服務器地址或名字,若是傳入,則忽略配置文件中設置的Server字段。

 

配置文件格式例子以下:學習

 

其中Server填遠程服務器的地址,Service Display Name填複製文件前須要中止的Windows服務顯示名字,Process Name填須要中止的進程名字,Item是要複製的文件或文件夾,以上參數能夠有多個節點。測試

Last Write Time填時間戳,全部修改時間在這以後的文件夾和文件都將會被複制,只能有一個。優化

Destination Folder填要複製到的目的端機器的文件夾路徑,若是沒有會自動建立,只能有一個。ui

 

四.   效果截圖

須要複製的源端文件夾以下:命令行

 

執行命令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,來自永遠薰薰

相關文章
相關標籤/搜索