Board logo

标题: [网络工具] 网络配置(pppoe、adsl宽带连接)备份与恢复批处理工具 [打印本页]

作者: neorobin    时间: 2010-7-26 16:11     标题: 网络配置(pppoe、adsl宽带连接)备份与恢复批处理工具

2010-7-28 版

2010-7-28 版 下载地址
http://www.fileden.com/files/2010/7/28/2926595/NC2010-7-28.rar

锁定和修改了以下几个问题:

1.
2010-7-26 初版 宽带连接 的 中文名称 问题:
宽带连接 的名称为中文时, 可备份, 但不能正常恢复, 原因为 备份文件 及 PBK 电话本文件采用了各种编码格式, 而批处理最易处理的只有 ANSI 编码, 加上代码中还有其它 BUG.

2.
2010-7-26 初版 宽带连接 的 名称 是英文时, 但有多个时, 也只能恢复第 1 个.

3.
在桌面建立快捷方式的参数都不正确.

4.
采纳 zjw767676 的建议, 将备份用的一个目录 D:\NCB 调整为 "硬盘上第 2 个盘符"\NCB,
如果连 第 2 个盘符也没有, 这个目录将是 C:\NCB.


2010-7-26 初版

此工具主要利用 netsh.exe (Windows 系统自带) 和 Dialupass.exe (dialup/RAS/VPN 账号密码工具)
来备份和恢复网络配置及dialup/RAS/VPN 账号和密码信息, 包括 PPPOE/ADSL 宽带连接类型的账号,密码,
导出 账号密码 时无须已连接网络, 网上许多其它的 ADSL/PPPoE 账号密码导出工具做不到这一点.


备份:

利用 netsh dump 来备份网络配置,
Dialupass.exe /stext <Filename> 来备份 dialup/RAS/VPN 账号和密码信息, 包括 PPPOE/ADSL 宽带连接类型

核心命令行格式如下:
>ScriptFile netsh dump
Dialupass.exe /stext Filename


备份的文件会存在以下各个地方:

%windir%\NCBackup

注册表 "HKCU\software\Microsoft\Windows\CurrentVersion\Explorer\Shell Folders"
Personal 指定的目录(在 winxp 中即"我的文档")下的 NCB 目录
"我的文档"目录\NCB

D:\NCB

如果检测有 U 盘类存储设备, 会在其根目录自动建立 NCB 目录, 再在 NCB 目录下建立 名为
%COMPUTERNAME%_MACADDRESS 的子目录, MACADDRESS 为当前一个活动网络连接对应的 MAC 地址, 例如:
计算机名为 PC, 而当前一个活动网络连接对应的 MAC 地址为 00:17:C4:8C:35:82, 那么子目录名为:
PC_00_17_C4_8C_35_82
再将生成的备份文件拷入 U 盘类存储设备根目录\NCB\PC_00_17_C4_8C_35_82 目录下.



恢复:

恢复网络配置
netsh exec ScriptFile

恢复 dialup/RAS/VPN 账号密码, 包括 PPPOE/ADSL 类宽带连接
Dialupass.exe /setpass <Entry Name> <User Name> <assword> <Domain>

恢复的依据文件是 D:\NCB 中日期最新的文件.


Dialupass.exe 下载页面
http://www.nirsoft.net/utils/dialupass.html
Dialupass.exe 下载地址
http://www.nirsoft.net/utils/dialupass.zip

备份配置 NCB.BAT
  1. @echo off & setlocal enableDelayedExpansion
  2. title IP ^& dialup/VPN configuration backup
  3. :remself 备份保存所有的 dialup/VPN 帐号, 密码; IP 配置. network configuration backup
  4. for /f "tokens=2*" %%p in (
  5.   'reg query "HKCU\software\Microsoft\Windows\CurrentVersion\Explorer\Shell Folders" /v Personal^|more +4'
  6.   ) do set PersonalNCB=%%~q\NCB
  7. set PersonalNCB=!PersonalNCB:\\=\!
  8. set WinNCB=%windir%\NCBackup
  9. set WinNCB=!WinNCB:\\=\!
  10. REM 找出硬盘上的第 2 个盘符, 若没有则设为 C: 盘
  11. for /f %%d in ('wmic logicaldisk where "DriveType=3" get DeviceID^|more +2') do set "2ndPttn=%%d" & goto :found2ndPttn
  12. set "2ndPttn=C:"
  13. :found2ndPttn
  14. for %%a in ("!WinNCB!" "!PersonalNCB!" "!2ndPttn!\NCB") do (
  15.   REM echo %%~a
  16.   >nul attrib -s -r -h "%%~a"
  17.   if not exist "%%~a"\nul md "%%~a"
  18.   attrib +s "%%~a"
  19.   >nul attrib -s -h -r "%%~a"\desktop.ini
  20.   >"%%~a"\desktop.ini (
  21.     for /f "delims=" %%l in (%~s0) do (
  22.       if /i "%%l"==":end:NCB\desktop.ini" set NCB_desktop_ini=0
  23.       if "!NCB_desktop_ini!"=="1" echo %%l
  24.       if /i "%%l"==":NCB\desktop.ini" set NCB_desktop_ini=1
  25.     )
  26.   )
  27.   attrib +s +h +r "%%~a"\desktop.ini
  28. )
  29. cd /d %~dps0
  30. copy /y Dialupass Dialupass.exe && echo "%~dp0Dialupass.exe"
  31. >nul attrib -s -r -h Dialupass_lng.ini
  32. if exist Dialupass_lng.ini del Dialupass_lng.ini
  33. call :getDateTime dt
  34. >nul (
  35.   attrib -r -s -h "!WinNCB!\netsh_dump_!dt!.txt"
  36.   attrib -r -s -h "!WinNCB!\DialupassBackup!dt!.txt"
  37. )
  38. >"!WinNCB!\netsh_dump_!dt!.txt" netsh.exe dump
  39. Dialupass.exe /stext "!WinNCB!\DialupassBackup!dt!.txt"
  40. for %%a in ("!WinNCB!\netsh_dump_!dt!.txt" "!WinNCB!\DialupassBackup!dt!.txt") do (echo.&echo [%%a]
  41.   attrib +r %%a
  42.   echo =============================================================
  43.   copy /y %%a !2ndPttn!\NCB && echo "!2ndPttn!\NCB\%%~nxa"
  44.   copy /y %%a "!PersonalNCB!" && echo "!PersonalNCB!\%%~nxa"
  45.   start notepad "!2ndPttn!\NCB\%%~nxa"
  46. )
  47. call :getCNMAC CNMAC
  48. for /f %%d in ('2^>nul wmic logicaldisk where "DriveType=2" get DeviceID^|more +1') do (
  49.   if exist %%d\nul (echo.
  50.     >nul attrib -s -r -h "%%d\!CNMAC!"
  51.     if not exist "%%d\NCB\!CNMAC!"\nul md "%%d\NCB\!CNMAC!"
  52.     attrib +s "%%d\NCB"
  53.     >nul xcopy /y /h "!WinNCB!\desktop.ini" "%%d\NCB"
  54.     copy /y "!WinNCB!\netsh_dump_!dt!.txt" "%%d\NCB\!CNMAC!" && echo "%%d\NCB\!CNMAC!\netsh_dump_!dt!.txt"
  55.     copy /y "!WinNCB!\DialupassBackup!dt!.txt" "%%d\NCB\!CNMAC!" && echo "%%d\NCB\!CNMAC!\DialupassBackup!dt!.txt"
  56.     start explorer "%%d\NCB\!CNMAC!"
  57.   )
  58. )
  59. if /i "%1" neq "-a" (echo press any key to exit...&pause>nul)
  60. exit /b
  61. :getDateTime dt 获取当前日期时间到变量 dt
  62. set %1=!date::=_!!time::=_!
  63. set %1=!%1:\=_!
  64. set %1=!%1:/=_!
  65. set %1=!%1:^|=_!
  66. set %1=!%1:星期=!
  67. set %1=!%1: =_!
  68. exit /b
  69. :NCB\desktop.ini
  70. [.ShellClassInfo]
  71. IconFile="%SystemRoot%\system32\SHELL32.dll"
  72. IconIndex=150
  73. LocalizedResourceName=@netcfgx.dll,-24001
  74. InfoTip="网络配置备份"
  75. ConfirmFileOp=0
  76. :end:NCB\desktop.ini
  77. :getCNMAC CNMAC
  78. for /f "tokens=2 delims=[]" %%a in ('ping -n 1 %computername% ^| find "["') do (
  79.   for /f "tokens=1-2" %%b in ('wmic nicconfig where "ipenabled='true'" get IPAddress^,MACAddress^|more +1') do (
  80.     if "%%b"=="{"%%a"}" (
  81.       set MAC=%%c
  82.       set %1=%computername%_!MAC::=_!
  83.     )
  84.   )
  85. )
  86. exit /b
复制代码
配置恢复 NCR.BAT
  1. @echo off & setlocal enableDelayedExpansion
  2. :remself 恢复最后保存的 dialup/VPN 帐号, 密码; IP 配置. network configuration backup
  3. :remself 可用的参数为 -a 可以自动运行.
  4. REM 在对 PBK 电话本文件的操作上, 以 ANSI 编码为基准.
  5. REM 因为 Windows Xp 系统下, 对 PBK 文件, 系统默认是按 UTF-8 无 BOM 格式处理的,
  6. REM 而且文件内部还有关于编码的问题, 即 Encoding 的值会指定其所在的一个条目下的编码是 什么
  7. REM Encoding=1 表明该条目按 UTF-8 处理
  8. REM Encoding=0 表明该条目按 ANSI 处理
  9. REM 但系统读取 PBK 文件后会自动将内部内容统一按 UTF-8 来重新保存, 原来指定的 Encoding=0 也会自动更改为 Encoding=1
  10. REM 本工具在对 PBK 文件追加条目时, 采取 Encoding=0 , 并以 ANSI 编码追加到 PBK 文件中. 系统读 PBK 后会统一成 UTF-8, 且 Encoding=1.
  11. REM 本工具应用的 Dialupass 版本为 3.06, 其 Dialupass.exe /stext 方式备份账号密码时, 输出文件的格式是 UCS-2 Little Endian
  12. REM 采用了编码转换工具  Ue2GB.vbs 将备份文件转换为临时的 ANSI 编码文件后, 再对其进行解析的.
  13. title IP ^& dialup/VPN configuration restore
  14. cd /d %~dps0
  15. (copy /y Dialupass Dialupass.exe)&& echo "%~dp0Dialupass.exe"
  16. call :genFile %~s0 U82GB_Force.vbs U82GB_Force_vbs
  17. REM 找出硬盘上的第 2 个盘符, 若没有则设为 C: 盘
  18. for /f %%d in ('wmic logicaldisk where "DriveType=3" get DeviceID^|more +2') do set "2ndPttn=%%d" & goto :found2ndPttn
  19. set "2ndPttn=C:"
  20. :found2ndPttn
  21. for /f "delims=" %%a in ('2^>nul dir !2ndPttn!\NCB\netsh_dump*.txt /o-d /b /s') do (
  22.   echo 将恢复以下 IP 设置
  23.   find /i "addr=" "%%a"
  24.   if /i "%1" neq "-a" pause
  25.   netsh exec "%%a"
  26.   goto :restoreDialupass
  27. )
  28. :restoreDialupass
  29. set "DuBkANSI=!2ndPttn!\NCB\DuBkANSI.txt"
  30. for /f "delims=" %%a in ('2^>nul dir !2ndPttn!\NCB\DialupassBackup*.txt /o-d /b /s') do (
  31.   Ue2GB.vbs %%~sa !DuBkANSI! /y
  32.   set "lastEntryName="
  33.   for /f "tokens=1-2 delims=:" %%b in ('type !DuBkANSI!') do (
  34.     set b%%b=%%b
  35.     set c%%c=%%c
  36.     set c%%c=!c%%c:* =!
  37.     set b%%b=!b%%b: =!
  38.     set $!b%%b!=!c%%c!
  39.     if "!$PhonebookFile!"=="!c%%c!" if defined $PhonebookFile if "!$EntryName!" gtr "" (
  40.       call :newPPPOE $EntryName
  41.       echo Dialupass /setpass "!$EntryName!" "!$UserName!" !$Password! !$Domain!
  42.       Dialupass.exe  /setpass "!$EntryName!" "!$UserName!" !$Password! !$Domain!
  43.       start rasphone -d "!$EntryName!"
  44.     )
  45.   )
  46.   start Control netconnections
  47.   del !DuBkANSI!
  48.   if /i "%1" neq "-a" pause
  49.   exit /b
  50. )
  51. exit /b
  52. REM ============= end main program =====================================================================================
  53. REM 向 PBK 电话本文件中追加变量 EntryName 指定名称的条目, 并在桌面建立对应的快捷方式
  54. :newPPPOE EntryName
  55.   REM 涉及到 rasphone.pbk 文件的编码和 find 查找兼容编码的问题, 此工具处理时以 ANSI 为基准.
  56.   REM 关于两个键值 DialParamsUID, Guid, 本工具不生成, 代由系统自动生成.
  57.   REM 打开 ncpa.cpl 刷新查看或 运行 rasdial ... 后, 系统会自动生成相关的键值.
  58.   REM Guid 的键值也可用 MS 的工具 UUIDGEN 来生成, 下载: http://filediag.com/windows/process/Uuidgen.Exe.html
  59.   REM PreviewUserPw=1 指定 提示名称, 密码和证书等.
  60.   call :genLnkCreat_vbs %~s0 LnkCreat.vbs LnkCreat_vbs "!%1!"
  61.   LnkCreat.vbs
  62.   del LnkCreat.vbs
  63.   set phoneBook="%AllUsersProfile%\Application Data\Microsoft\Network\Connections\Pbk\rasphone.pbk"
  64.   set PBK_ANSI="%AllUsersProfile%\Application Data\Microsoft\Network\Connections\Pbk\rasphone_ANSI.txt"
  65.   U82GB_Force.vbs !phoneBook! !PBK_ANSI!
  66.   find /i "[!%1!]" !PBK_ANSI!>nul&&(
  67.     echo [!%1!] 条目已存在于此 PBK 文件中: !phoneBook!
  68.     exit /b
  69.   )
  70.   del !PBK_ANSI!
  71.   echo 追加创建新条目 [!%1!] 到文件中: !phoneBook!
  72.   >>!phoneBook! (
  73.     echo.&echo [!%1!]
  74.     for /f "delims=" %%a in (%~s0) do (
  75.       if /i "%%a"==":end:phoneBook" set fileWriting=N
  76.       if /i "!fileWriting!"=="Y" (echo %%a)
  77.       if /i "%%a"==":phoneBook" set "fileWriting=Y"
  78.     )
  79.   )
  80. exit /b
  81. REM 在本批处理文件中提取 fileFlag 标志指定的文件模板部分, 并生成相应的文件
  82. :genFile sourceFile destFile fileFlag
  83.   >%2 (
  84.     for /f "delims=" %%a in (%1) do (
  85.       if /i "%%a"==":end:%3" set fileWriting=N
  86.       if /i "!fileWriting!"=="Y" (echo %%a)
  87.       if /i "%%a"==":%3" set "fileWriting=Y"
  88.     )
  89.   )
  90. exit /b
  91. REM 生成建立桌面快捷方式的脚本
  92. :genLnkCreat_vbs sourceFile destFile fileFlag=LnkCreat_vbs lnkName 这里参数 fileFlag 只是一个占位形式, 实际执行无影响
  93.   set "lnkName=%~4"& rem 采用 %~4 以允许参数传递时可以用双引号将含空格的 条目名称 括起完整传递到本过程, 而在这里再脱去双引号
  94.   >%2 (
  95.     for /f "delims=" %%a in (%1) do (
  96.       if /i "%%a"==":end:LnkCreat_vbs" set fileWriting=N
  97.       if /i "!fileWriting!"=="Y" (echo %%a)
  98.       if /i "%%a"==":LnkCreat_vbs" set "fileWriting=Y"
  99.     )
  100.   )
  101. exit /b
  102. REM 桌面快捷方式生成脚本模板
  103. :LnkCreat_vbs
  104. Set WshShell = Wscript.CreateObject("Wscript.Shell")
  105. ' 创建一个快捷方式对象,其在桌面上设置相同的名字
  106. strDesktop = WshShell.SpecialFolders("Desktop")
  107. Set oShellLink = WshShell.CreateShortcut(strDesktop & "\\!lnkName!.lnk")
  108. ' 设置快捷方式的执行路径
  109. oShellLink.TargetPath = "rasphone.exe"
  110. oShellLink.Arguments = "-d ""!lnkName!"""     ' 采用了两个转义的双引号将条目名称括起以支持 条目名称 含空格的情况.
  111. oShellLink.IconLocation = "rasphone.exe,0"  ' 设置文件夹快捷方式的图标路径
  112. oShellLink.Description = "连接宽带连接 !lnkName!"         ' 设置快捷方式的描述
  113. oShellLink.WorkingDirectory = "::{7007ACC7-3202-11D1-AAD2-00805FC1270E} :{BA126AD7-2166-11D1-B1D0-00805FC1270E}"   ' 起始位置
  114. oShellLink.Save
  115. :end:LnkCreat_vbs
  116. REM UTF-8 转 ANSI 脚本工具, 原作者: fastslz @http://bbs.cn-dos.net, 此处减去了原有的参数, 文件头的判断代码部分
  117. :U82GB_Force_vbs
  118. aCode = "UTF-8"
  119. bCode = "GB2312"
  120. Set objArgs=WScript.Arguments
  121. Sourcefile=objArgs(0)
  122. Getfile=objArgs(1)
  123. Call WriteToFile(Getfile, ReadFile(Sourcefile, aCode), bCode)
  124. Wscript.Quit
  125. Function ReadFile (Sourcefile, CharSet)
  126.   Dim Str
  127.   Set stm = CreateObject("Adodb.Stream")
  128.   stm.Type = 2
  129.   stm.mode = 3
  130.   stm.charset = CharSet
  131.   stm.Open
  132.   stm.loadfromfile Sourcefile
  133.   Str = stm.readtext
  134.   stm.Close
  135.   Set stm = Nothing
  136.   ReadFile = Str
  137. End Function
  138. Function WriteToFile (Getfile, Str, CharSet)
  139.   Set stm = CreateObject("Adodb.Stream")
  140.   stm.Type = 2
  141.   stm.mode = 3
  142.   stm.charset = CharSet
  143.   stm.Open
  144.   stm.WriteText Str
  145.   stm.SaveToFile Getfile,2
  146.   stm.flush
  147.   stm.Close
  148.   Set stm = Nothing
  149. End Function
  150. :end:U82GB_Force_vbs
  151. REM PBK 电话本文件模板, 因以 ANSI 操作为准, 故 Encoding=0; 其中两项 DialParamsUID, Guid 由系统自动生成.
  152. :phoneBook
  153. Encoding=0
  154. Type=5
  155. AutoLogon=0
  156. UseRasCredentials=0
  157. BaseProtocol=1
  158. VpnStrategy=0
  159. ExcludedProtocols=3
  160. LcpExtensions=1
  161. DataEncryption=8
  162. SwCompression=1
  163. NegotiateMultilinkAlways=0
  164. SkipNwcWarning=0
  165. SkipDownLevelDialog=0
  166. SkipDoubleDialDialog=0
  167. DialMode=1
  168. DialPercent=75
  169. DialSeconds=120
  170. HangUpPercent=10
  171. HangUpSeconds=120
  172. OverridePref=15
  173. RedialAttempts=3
  174. RedialSeconds=60
  175. IdleDisconnectSeconds=0
  176. RedialOnLinkFailure=1
  177. CallbackMode=0
  178. CustomDialDll=
  179. CustomDialFunc=
  180. CustomRasDialDll=
  181. AuthenticateServer=0
  182. ShareMsFilePrint=0
  183. BindMsNetClient=0
  184. SharedPhoneNumbers=0
  185. GlobalDeviceSettings=0
  186. PrerequisiteEntry=
  187. PrerequisitePbk=
  188. PreferredPort=
  189. PreferredDevice=
  190. PreferredBps=0
  191. PreferredHwFlow=0
  192. PreferredProtocol=0
  193. PreferredCompression=0
  194. PreferredSpeaker=0
  195. PreferredMdmProtocol=0
  196. PreviewUserPw=1
  197. PreviewDomain=0
  198. PreviewPhoneNumber=0
  199. ShowDialingProgress=1
  200. ShowMonitorIconInTaskBar=1
  201. CustomAuthKey=-1
  202. AuthRestrictions=632
  203. TypicalAuth=1
  204. IpPrioritizeRemote=1
  205. IpHeaderCompression=0
  206. IpAddress=0.0.0.0
  207. IpDnsAddress=0.0.0.0
  208. IpDns2Address=0.0.0.0
  209. IpWinsAddress=0.0.0.0
  210. IpWins2Address=0.0.0.0
  211. IpAssign=1
  212. IpNameAssign=1
  213. IpFrameSize=1006
  214. IpDnsFlags=0
  215. IpNBTFlags=0
  216. TcpWindowSize=0
  217. UseFlags=1
  218. IpSecFlags=0
  219. IpDnsSuffix=
  220. NETCOMPONENTS=
  221. ms_server=0
  222. ms_msclient=0
  223. MEDIA=rastapi
  224. Port=PPPoE5-0
  225. Device=WAN 微型端口 (PPPOE)
  226. DEVICE=rastapi
  227. PhoneNumber=
  228. AreaCode=
  229. CountryCode=1
  230. CountryID=1
  231. UseDialingRules=0
  232. Comment=
  233. LastSelectedPhone=0
  234. PromoteAlternates=0
  235. TryNextAlternateOnFail=1
  236. :end:phoneBook
复制代码

作者: zjw767676    时间: 2010-7-26 22:12

很好!很强大!!!
不过为什么要指定备份到D盘呢?备份到%~d0\NCB是不是更好点?
没有D盘的话会出错的!
作者: neorobin    时间: 2010-7-26 23:32     标题: 回复 2楼 的帖子

做这个主要是为装机考虑的, 多数个人用机器至少有两个分区, 即一般都有 D: 盘
在重装系统前将用户原始的 网络配置 包括 宽带 等账号密码 备份下来
若仅备份到系统分区(最多见的是 C 重装系统(ghost 方式)后, 无从恢复,

所以备份到 D: 盘 很重要, 若插了 U 盘, 也会将备份文件自动拷到 U 盘, 且 U 盘上会用 计算机名加一个网卡 MAC 来作为唯一标识目录(在 NCB 目录下)以便查阅在不同机器上备份的文件.

还有计算机名, 用户名等的备份和恢复, 以及与网络配置的关联 在进一步考虑中.
作者: zjw767676    时间: 2010-7-27 23:17

我的意思是加个判断D盘是否存在,如无则E,F。。。
我的D盘装了linux系统,Win下无D盘,所以有此想法!!
作者: neorobin    时间: 2010-7-28 04:16

感谢 zjw767676 的关注, 2010-7-28 版更新见顶楼.
作者: locoman    时间: 2011-3-19 22:47

谢谢楼主分享!收藏。
作者: Batcher    时间: 2011-3-21 12:44

3# neorobin


俺们公司所有的电脑D:都是留给光驱的^_^




欢迎光临 批处理之家 (http://bathome.net./) Powered by Discuz! 7.2