|
|
|
|
移动端

3.3.2 利用批处理脚本简化Windows逻辑节点的搬迁

《运维前线:一线运维专家的运维方法、技巧与实践》第3章数据中心搬迁中的x86自动化运维,本章主要介绍在大型数据中心搬迁的过程中,如何利用自行编制的各类脚本,低成本、高效率又准确地完成大量节点的逻辑搬迁工作。本节为大家介绍利用批处理脚本简化Windows逻辑节点的搬迁。

作者:云技术社区来源:机械工业出版社|2017-04-23 17:13

【新品产上线啦】51CTO播客,随时随地,碎片化学习

3.3.2 利用批处理脚本简化Windows逻辑节点的搬迁

下面是基于Windows批处理的脚本,主要实现功能为判断操作系统(Win2003/Win2008)和应用环境(研发和容灾),执行不同的批处理指令,将字典文件中的旧IP切换为对应的新IP:

  1. @echo ++++++++++++++++++++++++++++++++++++++++++++++++  
  2. @echo +欢迎使用Win2003/Win2008切换脚本,请根据切换环境输入指定的参数!+  
  3. @echo ++++++++++++++++++++++++++++++++++++++++++++++++  
  4. @choice /C:123 /N /M "1:研发测试环境 2:容灾环境 3:退出"  
  5.  
  6. if errorlevel 3 goto end  
  7. if errorlevel 2 goto zb  
  8. if errorlevel 1 goto kfcs  
  9.  
  10. # 以上语句显示欢迎页面,同时还显示应用环境菜单,根据操作的选取,可跳转到不同的环境  
  11. :kfcs                      #(设置开发测试环境的所有参数)  
  12. set adapter=                               #(初始化网卡变量)  
  13. set oldip=                                 #(初始化旧IP变量)  
  14. set newip=                                 #(初始化新IP变量)  
  15. set gateway=                               #(初始化新网关变量)  
  16. set dns1=                                  #(初始化主DNS变量)  
  17. set dns2=                                  #(初始化辅DNS变量)  
  18. set mask=255.255.255.0                     #(设置子网掩码变量为255.255.255.0)  
  19. set wsusserver=                            #(初始化WSUS服务器变量)  
  20. set ntpserver=                             #(初始化NTP服务器变量)  
  21. set wsusserver=http://192.168.127.198      #(为WSUS服务器赋予指定IP)  
  22. set ntpserver="192.168.127.103"            #(为NTP服务器赋予指定IP)  
  23. goto ver  
  24.  
  25. :zb                                        #(设置灾备环境的所有参数)  
  26. set adapter=                               #(初始化网卡变量)  
  27. set oldip=                                 #(初始化旧IP变量)  
  28. set newip=                                 #(初始化新IP变量)  
  29. set gateway=                               #(初始化新网关变量)  
  30. set dns1=192.168.127.1                     #(为DNS1服务器赋予指定IP)  
  31. set dns2=192.168.127.200                   #(为DNS2服务器赋予指定IP)  
  32. set mask=255.255.255.0                     #(设置子网掩码变量为255.255.255.0)  
  33. set wsusserver=                            #(初始化WSUS服务器变量)  
  34. set ntpserver=                             #(初始化NTP服务器变量)  
  35. set wsusserver=http://192.168.16.54        #(为WSUS服务器赋予指定IP)  
  36. set ntpserver="192.168.16.54"              #(为NTP服务器赋予指定IP)  
  37. goto ver  
  38. :ver    #(判断Windows版本是2003还是2008)  
  39. ver | find /i "6.1." > NUL  
  40. if %errorlevel% equ 0 (goto win2008)  
  41. ver | find /i "5.2."  > NUL  
  42. if %errorlevel% equ 0 (goto win2003)  
  43.  
  44. :win2008                                   # (如果是Win2008,则执行如下语句)  
  45. ipconfig | findstr /i "以太网适配器">c:\tmp\ipchange\adapter.txt  
  46. for /f "tokens=2*" %%i in (c:\tmp\ipchange\adapter.txt) do  
  47. @echo %%i %%j>c:\tmp\ipchange\adapter.txt  
  48. for /f "tokens=1 delims=:" %%i in (c:\tmp\ipchange\adapter.txt) do (  
  49. set adapter=%%i  
  50. echo %%i>c:\tmp\ipchange\adapter.txt  
  51. )  
  52. # 以上语句保存以太网适配器名称  
  53.  
  54. ipconfig | findstr /i "IPv4">c:\tmp\ipchange\oldip.txt  
  55. for /f "tokens=2 delims=:" %%i in (c:\tmp\ipchange\oldip.txt) do  
  56. @echo %%i>c:\tmp\ipchange\oldip.txt  
  57. for /f "tokens=*" %%i in (c:\tmp\ipchange\oldip.txt) do  
  58. @echo %%i>c:\tmp\ipchange\oldip.txt  
  59. for /f %%i in (c:\tmp\ipchange\oldip.txt) do set oldip=%%i  
  60. # 以上语句保存旧IP  
  61.  
  62. rem 获取DNS并保存  
  63. ipconfig /all | findstr /C:"DNS Servers" /C:"DNS 服务器  
  64. ">c:\tmp\ipchange\olddns.txt  
  65. for /f "tokens=2 delims=:" %%i in (c:\tmp\ipchange\olddns.txt) do @echo %%i  
  66. | findstr "^[0-9]*.[0-9]*.[0-9]*.[0-9]">c:\tmp\ipchange\olddns.txt  
  67. for /f "tokens=*" %%i in (c:\tmp\ipchange\olddns.txt) do  
  68. @echo %%i>c:\tmp\ipchange\olddns.txt  
  69. # 以上语句保存旧DNS服务器,以备更换后有旧DNS的回溯  
  70.  
  71. findstr /i "%oldip%"  
  72. c:\tmp\ipchange\ipcheck.txt>c:\tmp\ipchange\oldtonewip.txt  
  73. for /f "tokens=2" %%i in (c:\tmp\ipchange\oldtonewip.txt) do  
  74. @echo %%i>c:\tmp\ipchange\newip.txt  
  75. for /f %%i in (c:\tmp\ipchange\newip.txt) do set newip=%%i  
  76. # 以上语句查找字典文件ipcheck.txt中是否存在旧IP的条目,如果存在则提取与旧IP对应  
  77. 的新IP值,并赋给newip变量  
  78.  
  79. for /f "tokens=1-3 delims=." %%i in (c:\tmp\ipchange\newip.txt) do  
  80. echo %%i.%%j.%%k.254>c:\tmp\ipchange\gatewayip.txt  
  81. for /f %%i in (c:\tmp\ipchange\gatewayip.txt) do set gatewayip=%%i  
  82. # 以上语句提取newip变量中 以.为分隔符的前三位,最后一位设置为254,作为  
  83. GATEWAY的新值,并赋给gatewayip变量  
  84.  
  85. rem 备份hosts文件,并根据字典文件的定义,替换hosts内关联节点对应的IP  
  86. setlocal enabledelayedexpansion  
  87. for /f "tokens=*" %%i in (C:\WINDOWS\system32\drivers\etc\hosts) do (set  
  88. var=%%i  
  89. set "var=!var:%oldip%=%newip%!"  
  90. echo !var! >> C:\WINDOWS\system32\drivers\etc\hosts.new  
  91. )  
  92. ren C:\WINDOWS\system32\drivers\etc\hosts hosts.old  
  93. copy C:\WINDOWS\system32\drivers\etc\hosts.old C:\tmp\ipchange  
  94. ren C:\WINDOWS\system32\drivers\etc\hosts.new hosts  
  95. endlocal  
  96. # 以上语句备份c:\windows\system32\drivers\etc\hosts文件,并根据字典文件的定义替换  
  97. hosts文件内关联节点对应的IP与主机名的映射关系  
  98.  
  99. rem 自动设置新IP和网关              #(rem为脚本中的注释语句)  
  100. rem 自动设置新DNS                    #(rem为脚本中的注释语句)  
  101. netsh interface ipv4 set address "%adapter%" static %newip% %mask%  
  102. gateway=%gatewayip% 1  
  103. netsh interface ipv4 del dnsservers name="%adapter%" all  
  104. netsh interface ipv4 set dnsservers name="%adapter%" source=static %dns1%  
  105. register=primary validate=no 
  106. # netsh interface ipv4 add dnsservers "%adapter%" %dns2% index=2 validate=no 
  107. # 以上语句将先前几个步骤获取到的adapter、newip、gateway、dns1、dns2的变量,作为设置  
  108. 的参数直接为Windows系统设置新IP、新网关和新DNS  
  109. goto envir                      # (跳转到envir,调整其他附加环境)  
  110.  
  111. :win2003                        # (如果是Win2003,则执行如下语句)  
  112. ipconfig | findstr /i "Ethernet adapter">c:\tmp\ipchange\adapter.txt  
  113. for /f "tokens=3delims= " %%i in (c:\tmp\ipchange\adapter.txt) do  
  114. @echo %%i %%j>c:\tmp\ipchange\adapter.txt  
  115. for /f "tokens=1 delims=:" %%i in (c:\tmp\ipchange\adapter.txt) do (  
  116. set adapter=%%i  
  117. echo %%i>c:\tmp\ipchange\adapter.txt  
  118. )  
  119. # 以上语句保存以太网适配器的名称  
  120. ipconfig | findstr /i "IP Address">c:\tmp\ipchange\oldip.txt  
  121. for /f "tokens=2 delims=:" %%i in (c:\tmp\ipchange\oldip.txt) do  
  122. @echo %%i>c:\tmp\ipchange\oldip.txt  
  123. for /f "tokens=*" %%i in (c:\tmp\ipchange\oldip.txt) do  
  124. @echo %%i>c:\tmp\ipchange\oldip.txt  
  125. for /f %%i in (c:\tmp\ipchange\oldip.txt) do set oldip=%%i  
  126. # 以上语句保存旧IP  
  127.  
  128. rem 获取DNS并保存  
  129. ipconfig /all | findstr /C:"DNS Servers" /C:"DNS 服务器  
  130. ">c:\tmp\ipchange\olddns.txt  
  131. for /f "tokens=2 delims=:" %%i in (c:\tmp\ipchange\olddns.txt) do @echo %%i  
  132. | findstr "^[0-9]*.[0-9]*.[0-9]*.[0-9]">c:\tmp\ipchange\olddns.txt  
  133. for /f "tokens=*" %%i in (c:\tmp\ipchange\olddns.txt) do  
  134. @echo %%i>c:\tmp\ipchange\olddns.txt  
  135. # 以上语句保存旧DNS服务器,以备更换后有旧DNS的回溯  
  136.  
  137. findstr /i "%oldip%\>"  
  138. c:\tmp\ipchange\ipcheck.txt>c:\tmp\ipchange\oldtonewip.txt  
  139. for /f "tokens=2" %%i in (c:\tmp\ipchange\oldtonewip.txt) do  
  140. @echo %%i>c:\tmp\ipchange\newip.txt  
  141. for /f %%i in (c:\tmp\ipchange\newip.txt) do set newip=%%i  
  142. # 以上语句查找字典文件ipcheck.txt中是否存在旧IP的条目,如果存在则提取与旧IP对应  
  143. 的新IP值,并赋给newip变量  
  144.  
  145. for /f "tokens=1-3 delims=." %%i in (c:\tmp\ipchange\newip.txt) do  
  146. echo %%i.%%j.%%k.254>c:\tmp\ipchange\gatewayip.txt  
  147. for /f %%i in (c:\tmp\ipchange\gatewayip.txt) do set gatewayip=%%i  
  148. # 以上语句提取newip变量中 以.为分隔符的前三位,最后一位设置为254,作为  
  149. GATEWAY的新值,并赋给gatewayip变量  
  150.  
  151. rem 备份并替换hosts文件  
  152. setlocal enabledelayedexpansion  
  153. for /f "tokens=*" %%i in (C:\WINDOWS\system32\drivers\etc\hosts) do (set  
  154. var=%%i  
  155. set "var=!var:%oldip%=%newip%!"  
  156. echo !var! >> C:\WINDOWS\system32\drivers\etc\hosts.new  
  157. )  
  158. ren C:\WINDOWS\system32\drivers\etc\hosts hosts.old  
  159. copy C:\WINDOWS\system32\drivers\etc\hosts.old C:\tmp\ipchange  
  160. ren C:\WINDOWS\system32\drivers\etc\hosts.new hosts  
  161. endlocal  
  162. # 以上语句备份c:\windows\system32\drivers\etc\hosts文件,并根据字典文件的定义替换  
  163. hosts文件内关联节点对应的IP与主机名的映射关系  
  164.  
  165. rem 自动设置新IP和网关  
  166. rem 自动设置新DNS  
  167. netsh interface ip set address name="%adapter%" source=static %newip% %mask%  
  168. gateway=%gatewayip% auto  
  169. netsh interface ip del dns name="%adapter%" all  
  170. netsh interface ip set dns name="%adapter%" source=static %dns1%  
  171. register=primary 
  172. #netsh interface ip add dns "%adapter%" %dns2% index=2 
  173. # 以上语句将先前几个步骤获取到的adapter、newip、gateway、dns1、dns2的变量,作为设置  
  174. 的参数直接为Windows系统设置新IP、新网关和新DNS  
  175. goto envir                  # (跳转到envir,调整其他附加环境)  
  176.  
  177. :envir                  #(执行调整其他附加环境的语句)  
  178.  
  179. rem ==========================================================================  
  180. rem 2.设置Patrol参数  
  181. echo Windows Registry Editor Version 5.00>c:\tmp\ipchange\patrolagent.reg  
  182. echo.>>c:\tmp\ipchange\patrolagent.reg  
  183. echo  
  184. [HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\PatrolAgent\Paramete  
  185. rs]>>c:\tmp\ipchange\patrolagent.reg  
  186. echo "Port"=dword:00000c6d>>c:\tmp\ipchange\patrolagent.reg  
  187. echo "ID"="%newip%">>c:\tmp\ipchange\patrolagent.reg  
  188. regedit /s c:\tmp\ipchange\patrolagent.reg  
  189. # 以上语句将新IP写入PatrolAgent的注册表参数,确保Patrol监控软件正常工作  
  190.  
  191. rem=======================================================================  
  192. rem 3.设置WSUS服务器参数  
  193. echo Windows Registry Editor Version 5.00>c:\tmp\ipchange\wsus.reg  
  194. echo.>>c:\tmp\ipchange\wsus.reg  
  195. echo  
  196. [HKEY_LOCAL_MACHINE\SOFTWARE\Policies\Microsoft\windows\WindowsUpdate]>>c:  
  197. \tmp\ipchange\wsus.reg  
  198. echo "WUServer"=%wsusserver%>>c:\tmp\ipchange\wsus.reg  
  199. echo "WUStatusServer"=%wsusserver%>>c:\tmp\ipchange\wsus.reg  
  200. echo.>>c:\tmp\ipchange\wsus.reg  
  201. echo  
  202. [HKEY_LOCAL_MACHINE\SOFTWARE\Policies\Microsoft\windows\WindowsUpdate\AU]> 
  203. >c:\tmp\ipchange\wsus.reg  
  204. echo "NoAutoUpdate"=dword:00000000>>c:\tmp\ipchange\wsus.reg  
  205. echo "AUOptions"=dword:00000003>>c:\tmp\ipchange\wsus.reg  
  206. echo "ScheduledInstallDay"=dword:00000000>>c:\tmp\ipchange\wsus.reg  
  207. echo "ScheduledInstallTime"=dword:00000017>>c:\tmp\ipchange\wsus.reg  
  208. echo "UseWUServer"=dword:00000001>>c:\tmp\ipchange\wsus.reg  
  209. regedit /s c:\tmp\ipchange\wsus.reg  
  210. # 以上语句将WSUS的IP及配置参数写入注册表,确保Windows客户端能从WSUS正确获取  
  211. 更新补丁  
  212.  
  213. rem=======================================================================  
  214. rem 4.设置NTP服务器参数  
  215. echo Windows Registry Editor Version 5.00>c:\tmp\ipchange\ntp.reg  
  216. echo.>>c:\tmp\ipchange\ntp.reg  
  217. echo  
  218. [HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\DateTime\Ser  
  219. vers]>>c:\tmp\ipchange\ntp.reg  
  220. echo @="0">>c:\tmp\ipchange\ntp.reg  
  221. echo "0"=%ntpserver%>>c:\tmp\ipchange\ntp.reg  
  222. echo  
  223. [HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\services\W32Time\TimeProvider  
  224. s\NtpClient]>>c:\tmp\ipchange\ntp.reg  
  225. echo "Enabled"=dword:00000001>>c:\tmp\ipchange\ntp.reg  
  226. echo "SpecialPollInterval"=dword:2a300>>c:\tmp\ipchange\ntp.reg  
  227.  
  228. regedit /s c:\tmp\ipchange\ntp.reg  
  229.  
  230. w32tm /config /manualpeerlist:%ntpserver% /syncfromflags:manual  
  231. /reliable:yes  
  232. w32tm /config /update  
  233. net stop w32time  
  234. net start w32time  
  235. w32tm /resync  
  236. sc config w32time startauto 
  237. # 以上语句将NTP的IP及配置参数写入注册表,确保Windows客户端定期与NTP服务器同步  
  238.  
  239. rem=======================================================================  
  240. rem 5.设置UAC禁用  
  241. reg add  
  242. "HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\Sys  
  243. tem" /v "LocalAccountTokenFilterPolicy" /t REG_DWORD /d "1" /f  
  244. # 以上语句设置Windows的UAC功能  
  245.  
  246. rem=======================================================================  
  247. rem 6.设置Administrator(管理员)及Patrol(监控平台用户)的密码  
  248. #net user administrator ????????       ????????请用实际密码代替  
  249. #net user patrol ********              ********请用实际密码代替  
  250. # 以上语句用于初始化重置Administrator和Patrol用户密码  
  251.  
  252. rem=======================================================================  
  253. rem 7.关闭计算机  
  254. #shutdown /t 3 /s                       (shutdown前标注了#,所以此句只标注不执行)  
  255. :end 


喜欢的朋友可以添加我们的微信账号:

51CTO读书频道二维码


51CTO读书频道活动讨论群:342347198

【责任编辑:book TEL:(010)68476606】

回书目   上一节   下一节
点赞 0
分享:
大家都在看
猜你喜欢

读 书 +更多

Eclipse插件开发方法与实战

本书分为4个部分共24章,以插件开发为中心,围绕插件开发主要介绍SWT/JFace的应用、插件扩展点的实现,以及GEF、EMF和RCP的相关知识。本书...

订阅51CTO邮刊

点击这里查看样刊

订阅51CTO邮刊