Board logo

标题: DOS COMMAND編寫對遠端多台主機檔案進行更新的腳本 [打印本页]

作者: ymtien     时间: 2006-10-20 22:52    标题: DOS COMMAND編寫對遠端多台主機檔案進行更新的腳本

前言:

在管理Winodw系統主機時,我們常會利用到DOS Command 指令或是wsh(Windows Script Host)之類的指令語法編寫管理用的Scripts,進階一點的管理者甚致會自己利用vbscript、javascript、vb等程式語言編寫所需的管理程式工具,在管理多台遠端主機時,我們常會需要做檔案更新的工作,但如果是管理10台、20台或是更多主機時,如果一台一台的更新,那會是很煩人又很浪費時間的工作,如果對程式不太熟,或是就算用工具軟體來做更新的工作,但如果是需付費的也有版權的問題,這邊我自己編寫了一個利用DOS Command編寫的一個DOS Scripts提供需要的朋友!

實 作:

一.準備工作:

1.首先我們在Maintain用的主機和其它你每天要管理的主機上建立一組有讀取權限的帳號讓管理主機可以讀取其它主機。

2.在防火牆及被管理主機上請開放遠端共享給Maintain用的主機。

二.再來介紹這個scripts的組成檔案有那些

1. ip.ini ---> 這個檔案是記錄我們要更新的主機有那些,把你要更新的主機ip和Hostname加到這個檔案裡並命名為ip.ini存檔就可以了。

--------------------------------------檔案內容 ------------------------------------

192.168.1.1WEB1

192.168.1.2WEB2

192.168.1.3WEB3

---------------------------------------------------------------------------------------

2. Log資料夾 --->這是要放置log記錄檔的資料夾,建立一個叫Log的資料夾就可以了。

三.接下來就是程式主體了

3. Start_Update.bat ---> 這支Scripts是我們要執行更新工作的檔案,把以下原始碼copy起來存成Start_Update.bat並存檔。

--------------------------------------原始碼 ------------------------------------

@echo off

:input_source

mode con lines=30

title 遠端主機檔案更新程序

color 1f

cls

echo-------------------------------- 執行檔案更新程序 -----------------------------

echo請選擇執行項目後按[Enter]鍵執行

echo開始更新請按 (1) 遠端主機列表請按 (2)

echo說明請按 (3) 查看更新記錄請按 (4) 退出請按 (0)

echo-------------------------------------------------------------------------------------

set source=:

set /p source=請輸入執行項目:

set "source=%source:"=%"

:: 上面這句為判斷%source%中是否存在引號,有則剔除。

if "%source%"==":" goto input_source

if "%source%"=="0" exit

if "%source%"=="1" goto update

if "%source%"=="2" goto list

if "%source%"=="3" goto readme

if "%source%"=="4" goto log

set id =

  

:update

start Start_Update.bat

cls

mode con lines=35

color 8e

title 遠端主機檔案更新

echo-------------------------------------------------------------------------------------

echo--- 即將開始對以下位置遠端主機進行檔案更新 ---

echo確定請按[Enter]

echo-------------------------------------------------------------------------------------

echo -------------------------------------------------------------------------------------

type ip.ini

echo -------------------------------------------------------------------------------------

pause>nul

del Log\*.txt

FOR /F "eol=;" %%i in (ip.ini) do sync.bat %%i %1

pause>nul

goto input_source

:list

cls

mode con lines=30

color 8e

title 更新主機列表

echo------------------------------------------------------------------------------------

echo--- 遠端主機列表 ---

echo------------------------------------------------------------------------------------

echo------------------------------------------------------------------------------------

echo 主機IP:主機名稱:

type ip.ini

echo------------------------------------------------------------------------------------

echo請按任意鍵返回上一步...

pause>nul

goto input_source

:readme

cls

mode con lines=30

color 8e

title 操作說明

echo-----------------------------------------------------------------------------------

echo--- 操作說明 ---

echo1. 如果要新增或刪除更新的主機位置,請直接修改IP.INI檔。

echo2. 修改上傳檔案主機檔案位置,請修改sync.bat的第十三行

echoxcopy c:\你自定的檔案位置\*.*Z:\/s /e /y /z /f

echo將 " c:\你自定的檔案位置\ "改為上傳檔案的放置位置。

echo

echo3. 修改遠端主機上檔案的放置位置,請修改sync.bat的第七行

echonet use "Z:\\%1\c$\update" 遠端主機檔案放置位置。

echo-----------------------------------------------------------------------------------

echo請按任意鍵返回上一步...

pause>nul

goto input_source

  

:log

cls

mode con lines=42

color 8e

title 更新主機列表

echo-----------------------------------------------------------------------------------

echo--- 檔案更新記錄 ---

echo-----------------------------------------------------------------------------------

type Log\synclog.txt

echo請按任意鍵返回上一步...

pause>nul

goto input_source

  

4. sync.bat --->這支是執行程式要呼叫執行檔案更新的Scripts, 把以下原始碼copy起來存成Start_Update.bat並存檔。

說明:

1. xcopy c:\test\*.*Z:\/s /e /y /z /f 這行請修改為你要上傳檔案的放置位 置。

2. net use z: \\%1\c$\update 這行請修改為你要上傳檔案放置在遠端主機上的位置, 要上傳檔案的所有主機,檔案放置位置一定要一致

  

-------------------------------------原始碼 ------------------------------------

@echo off

rem ****************************************************************

rem *File Name : SYNC.BAT*

rem *Update the files by xcopy command*

rem ****************************************************************

  

net use z: \\%1\c$\update

echo Server IP:%1 >> Log/synclog.txt

date/T >> Log/synclog.txt

time /T >> Log/synclog.txt

echo ----------------------------------------------------------------

@echo on

xcopy c:\test\*.*Z:\/s /e /y /z /f

  

@echo off

rem ----- Error Messages --------------------------------------------

  

if errorlevel 1 goto nofiles

if errorlevel 2 goto abort

if errorlevel 4 goto lowmemory

if errorlevel 5 goto write_error

if errorlevel 0 goto succeed

  

:succeed

net use z: /delete

echo %1: Update is succeed! >> Log/synclog.txt

echo *******************************************************************

echo %1: Update is succeed!

echo *******************************************************************

echo -------------------------------------------------------------- >> Log/synclog.txt

goto finish

  

:nofiles

echo %1: Can't find files of the update data! >> Log/synclog.txt

echo *******************************************************************

echo %1: Can't find files of the update data!

echo *******************************************************************

echo -------------------------------------------------------------- >> Log/synclog.txt

goto quit

  

:abort

echo %1: The copy operation is end by the user![CTRL+C] >> Log/synclog.txt

echo *******************************************************************

echo%1: The copy operation is end by the user![CTRL+C]

echo *******************************************************************

echo -------------------------------------------------------------- >> Log/synclog.txt

goto :quit

  

:lowmemory

echo %1: Out of Memory or Out of drive space! >> Log/synclog.txt

echo %1: Can't find drive or command error !>> Log/synclog.txt

echo *******************************************************************

echo%1: Out of Memory or Out of drive space!

echo%1: Can't find drive or command error !

echo *******************************************************************

echo -------------------------------------------------------------- >> Log/synclog.txt

goto quit

  

:exit

echo %1: Write error!>> Log/synclog.txt

echo *******************************************************************

echo %1: Write error!

echo *******************************************************************

echo -------------------------------------------------------------- >> Log/synclog.txt

goto quit

  

:quit

net use z: /delete

echo %1: Update faild!>> Log/synclog.txt

echo *******************************************************************

echo %1: Update faild!

echo *******************************************************************

echo -------------------------------------------------------------- >> Log/synclog.txt

goto finish

  

:finish

echo%1:檔案已更新完畢...

echo ----------------------------------------------------------------------------------

  

五.測試看看囉:

全部都設定ok之後,在管理主機上執行Start_Update.bat這支Scripts,就會自動把你要更新的檔案全部上傳到所有需要更新檔案的主機上囉,幾十台主機不到幾分鐘就全部更新完畢,如果再加上排程,還可以自定更新時間喔!是不是很方便又很簡單呢!

  

作者:小田仔 2006/10/15
作者: electronixtar     时间: 2006-10-20 23:04
不错哦~~是不是多发了一份?

NT Batch 的很多技巧也没有用上,呵呵