浅谈基于 VHD 方式在中小型企业内部署 Windows 8的一些思路与方法(5)-完结

本篇接“浅谈基于VHD方式在中小型企业内部署Windows8的一些思路与方法(4)”(下面简称“思路4),主要对笔者一些想法进行探讨。本篇是本系列最后一篇文章。

上篇文章,笔者着重介绍如何使用批处理文件配合员工DIY(Windows XP)部署与卸载基于VHD文件启动的Windows 8。本篇将对计算机是新装Windows 7的员工,DIY部署与卸载基于VHD启动的Windows 8进行探讨。

7.5 对Windows 7操作系统进行基于VHD文件启动Windows 8的部署

要启动基于VHD文件启动的Windows 8。需要满足下列要求:

1.      配置升级启动文件,确保bootmgr启动器文件支持VHD内的Windows 8
2.      正确配置BCD文件,确保bootmgr可以正确引导VHD内的系统启动

写批处理文件时,还要考虑到员工客户端的操作系统。不同的操作系统,引导不一致。这点可以参考笔者“浅谈基于VHD方式在中小型企业内部署Windows8的一些思路与方法(2)”。本文不再叙述。

制作批处理文件处理引导信息,需注意引导类型。

客户机是Windows 7,基于VHD文件启动的windows8的启动过程:

1.      开机MBR引导启动分区bootmgr(必须使用NT6.0引导信息)
2.      Bootmgr读取BCD信息获取启动项(bootmgr要支持Windows 8)
3.      OS启动

要注意的有2点:

1.     Windows7的bootmgr不支持Windows 8。故Windows 7下员工自主安装基于VHD文件启动的windows8,重要步骤是升级bootmgr。
2.     对新硬盘安装Windows 7的计算机启动文件一般存放于隐藏分区的处理。如下图:

 
可看到新硬盘安装的Windows 7,默认启动文件存放于没有分配盘符的100M的第一个分区

通过对比,不难发现。使用Windows 7的员工要实现DIY安装基于VHD文件启动的windows8,必须使用批处理完成下列3项内容:

1.      分配启动隐藏分区盘符(如有必要)
2.      升级bootmgr启动器文件
3.      配置BCD启动项,添加基于VHD文件启动的windows8的启动项

7.5.1新硬盘安装Windows 7隐藏启动分区的盘符分配与卸载

批量启动文件存放于启动分区,故需获取启动分区盘符。有部分计算机启动分区没有盘符,需进行分配盘符。盘符分配与卸载批处理如下:

 

1. @echo off
2. echo select disk 0 >%temp%\assign.txt
3. echo select partition 1 >>%temp%\assign.txt
4. echo assign=>>%temp%\assign.txt
5. echo exit>>%temp%\assign.txt
6. diskpart /s %temp%\assign.txt
7. echo 已分配启动分区盘符,按任意键卸载启动分区盘符
8. pause
9. echo select disk 0 >%temp%\remove.txt
10. echo select partition 1 >>%temp%\remove.txt
11. echo remove>>%temp%\remove.txt
12. echo exit>>%temp%\remove.txt
13. diskpart /s %temp%\remove.txt
14. echo 已卸载启动分区盘符,演示完毕
15. pause
16. exit

 

演示效果:

 
1.     笔者的计算机装有Windows 7。启动分区未分配盘符

 
2.     可以看到成功分配启动文件所在分区盘符


3.     成功卸载启动分区盘符。演示完毕

7.5.2 NT6.0使用批处理升级并配置启动项

获取启动分区盘符后,可以针对启动分区内的启动文件进行升级与配置。步骤有下列2项:

1.      升级boogmgr启动器文件,以支持基于VHD文件的Windows 8启动
2.      编辑BCD启动项

以上2个步骤,解决较简单。

1.      找到bootmgr启动器文件,获取权限,删除并替换新bootmgr启动器文件(权限工具Windows 7内置)
2.      这个问题笔者在上篇文章演示过。这里就不做介绍。(编辑BCD启动项信息使用的BCDEDIT工具Windows 7内置)

对第一点来说,Bootmgr启动文件Windows 7过旧,用户需提前准备。可将Windows 8的bootmgr存放于ftp,使用批处理下载。FTP批处理下载参考笔者上篇文章7.1。

批处理文件内容如下(假设启动盘是e,实际使用配合查找到的启动分区):

1. @echo off
2. takeown.exe /F e:\bootmgr /A
3. icacls.exe e:\bootmgr /grant Administrators:F
4. del e:\bootmgr /a /f /q
5. echo 权限获取成功,删除旧版boogmgr
6. pause
7. echo open 192.168.1.2> dbootmgr.txt
8. echo win8>> dbootmgr.txt
9. echo 123456>> dbootmgr.txt
10. echo lcd e:\>> dbootmgr.txt
11. echo get bootmgr>> dbootmgr.txt
12. echo bye>> dbootmgr.txt
13. ftp -s:dbootmgr.txt 1>nul
14. del dbootmgr.txt
15. echo 文件更新成功
16. pause
17. exit

演示效果:

 
1.     未更新时旧版bootmgr文件的修改时间是2010年

 
2.     删除旧版文件成功

 
3.     文件更新成功。可看到新文件的修改时间为2013年。至此,bootmgr更新演示完毕

接着,笔者在批处理内写入VHD启动信息。对比上篇批处理文件改动不大。笔者这里简单演示下。

注意。由于bcdedit命令语言问题,在上篇Windows XP系统下下载的bcdedit命令回显是英文,调用中文版Windows 7的bcdedit命令回显是中文,故截取启动项的GUID稍有不同。英文版GUID在回显第三列,中文版在回显第二列。故需注意将tokens=3改为2。

环境:
OS:Windows 7
VHD store:D:\win8ent.Vhd

批处理文件内容如下:

1. @echo off
2. FOR /F "tokens=2 delims= " %%i in ('bcdedit /create /d "Windows 8" /application  osloader') do set _win8id=%%i
3. 
4. bcdedit /set %_win8id% device vhd=[D:]\win8ent.vhd
5. bcdedit /set %_win8id% osdevice vhd=[D:]\win8ent.vhd
6. bcdedit /set %_win8id% path \Windows\system32\winload.exe
7. bcdedit /set %_win8id% systemroot \windows
8. bcdedit /set %_win8id% locale zh-cn
9. bcdedit /displayorder %_win8id% /addlast
10. 
11. bcdedit /set {bootmgr} default %_win8id%
12. bcdedit /timeout 30
13. echo 成功添加基于VHD文件启动的Windows 8启动项
14. pause
15. exit

 

执行效果

 
1.     运行前的检查。可看到BCD文件的启动项只有Windows 7

 
2.     这次没有设置回显隐藏,可以看到命令成功执行。使用bcdedit打开BCD文件。可看到已成功添加笔者要求添加的启动信息。至此,添加启动项演示完毕。

7.5.3 卸载基于VHD文件启动Windows 8

通过以上介绍,员工DIY部署基于VHD文件启动的Windows 8,主要改动有以下2点:

1.     升级bootmgr
2.     修改BCD信息,加入基于VHD文件启动Windows 8的启动信息
3.     下载VHD文件到本机

要实现自动卸载功能,需对以上第2、3点进行逆向处理。第1点是不需要处理的。原因在于Windows 8的bootmgr启动器向下兼容。并且再次安装基于VHD文件启动的Windows 8。是否替换该文件也无影响。第二点与第三点笔者在上篇文章有过介绍,这里只做简单演示。

笔者假设VHD文件存放于分区D,名字为win8.vhd。批处理内容:

1. @echo off
2. bcdedit /delete {default}
3. echo 成功删除基于VHD文件启动的Windows 8启动项
4. del d:\win8.vhd /a /f /q
5. echo 成功删除基于VHD文件启动的Windows 8
6. pause
7. exit

演示效果:

 
1.     可看到,VHD文件存放于分区D。BCD有Windows 8的启动项

 
2.     运行批处理,基于VHD文件启动的Windows 8相关内容被清理。至此,卸载演示完毕

7.5.4 批处理的组合

考虑到批处理的合理性、员工的少操作性,并与上一篇文章内容配套。笔者对批处理文件组合采取了以下顺序:

1.     员工选择系统,来确认启动文件的部署方式与卸载方式
2.     员工选择安装或卸载操作
3.     员工选择分区,用于存放VHD。并记录VHD存放分区信息
4.     批处理升级bootmgr启动器。并进行BCD文件修改
5.     批处理自动下载VHD文件。

可以看到,改动并不大

首先,笔者用到的批处理文件如下:

1.      index.bat            员工DIY安装文件。提供员工选择及调用相关批处理
2.      win7changiu.bat       被调用的批处理,提供选择安装或卸载基于VHD文件启动的windows 8功能
3.      win7instll.bat         被调用的批处理,提供自动安装NT6.0环境下、基于VHD文件启动的windows 8. (无隐藏启动分区)
4.      win7instll1.bat        被调用的批处理,提供自动安装NT6.0环境下、基于VHD文件启动的windows 8.(有隐藏启动分区)
5.      win7uninstall.bat      被调用的批处理,提供基于VHD文件启动的windows 8

其中,2、3、4、5这4个批处理文件笔者放于公司FTP服务器

笔者演示的环境:
服务器
OS:Windows Server 2003
Role:FTP Server
IP:192.168.1.2
Ftpuser:win8
ftp password :123456

客户机
OS:Windows 7
IP:192.168.100.128

批处理内容:

1.     index.bat

1. @echo off
2. echo 本软件用来安装Windows8,退出请关闭本窗口
3. pause
4. :changeos
5. cls
6. echo 请选择您的操作系统
7. echo #####################################################
8. echo Windows XP请按1
9. echo Windows 7请按2
10. echo Windows XP与Windows 7双系统请按3
11. echo Windows XP与Windows XP请按1
12. echo Windows 7与Windows 7请按2
13. echo #####################################################
14. 
15. set cos=
16. set /p cos=请输入对应数字选择您的操作系统:
17. echo 您的输入的是:%cos%,
18. set /p chkcos=如果输入错误请按N,确认输入没错请按y,:
19. if "%chkcos%"=="n" goto changeos
20. if "%chkcos%"=="N" goto changeos
21. if "%chkcos%"=="y" goto next1
22. if "%chkcos%"=="Y" goto next1
23. echo 您输入有误,将返回重新输入
24. pause
25. goto changeos
26. 
27. :next1
28. if "%cos%"=="1" goto xp
29. if "%cos%"=="2" goto win7
30. if "%cos%"=="3" goto xp7
31. echo 您输入有误,将返回重新输入
32. pause
33. goto changeos
34. 
35. :xp
36. echo open 192.168.1.2> %temp%\vhdwin8xp.txt
37. echo win8>> %temp%\vhdwin8xp.txt
38. echo 123456>> %temp%\vhdwin8xp.txt
39. echo lcd %temp%>> %temp%\vhdwin8xp.txt
40. echo get xpchangiu.bat>> %temp%\vhdwin8xp.txt
41. echo bye>> %temp%\vhdwin8xp.txt
42. ftp -s:%temp%\vhdwin8xp.txt 1>nul
43. del /q %temp%\vhdwin8xp.txt
44. call %temp%\xpchangiu.bat
45. del /q %temp%\xpchangiu.bat
46. exit
47. 
48. :win7
49. echo open 192.168.1.2> %temp%\vhdwin8win7.txt
50. echo win8>> %temp%\vhdwin8win7.txt
51. echo 123456>> %temp%\vhdwin8win7.txt
52. echo lcd %temp%>> %temp%\vhdwin8win7.txt
53. echo get win7changiu.bat>> %temp%\vhdwin8win7.txt
54. echo bye>> %temp%\vhdwin8win7.txt
55. ftp -s:%temp%\vhdwin8win7.txt 1>nul
56. del /q %temp%\vhdwin8win7.txt
57. call %temp%\win7changiu.bat
58. del /q %temp%\win7changiu.bat
59. exit
60. 
61. :xp7
62. echo open 192.168.1.2> %temp%\vhdwin8xp7.txt
63. echo win8>> %temp%\vhdwin8xp7.txt
64. echo 123456>> %temp%\vhdwin8xp7.txt
65. echo lcd %temp%>> %temp%\vhdwin8xp7.txt
66. echo get xp7changiu.bat>> %temp%\vhdwin8xp7.txt
67. echo bye>> %temp%\vhdwin8xp7.txt
68. ftp -s:%temp%\vhdwin8xp7.txt 1>nul
69. del /q %temp%\vhdwin8xp7.txt
70. call %temp%\xp7changiu.bat
71. del /q %temp%\xp7changiu.bat
72. exit

 

2.     win7changiu.bat

1. @echo off
2. :uni
3. cls
4. echo 请选择要进行的工作
5. echo #####################################################
6. echo 安装Windows 8请按 1
7. echo 卸载Windows 8请按 2
8. echo #####################################################
9. set unisos=
10. set /p unisos=请输入对应数字选择您的操作:
11. echo 您的输入的是:%unisos%,
12. set /p chkunisos=如果输入错误请按N,确认输入没错请按y,:
13. if "%chkunisos%"=="n" goto uni
14. if "%chkunisos%"=="N" goto uni
15. if "%chkunisos%"=="y" goto next2
16. if "%chkunisos%"=="Y" goto next2
17. echo 您输入有误,将返回重新输入
18. pause
19. goto uni
20. 
21. :next2
22. if "%unisos%"=="1" goto instll
23. if "%unisos%"=="2" goto uninstall
24. echo 您输入有误,将返回重新输入
25. pause
26. goto uni
27. 
28. :instll
29. echo open 192.168.1.2> %temp%\Win7instll.txt
30. echo win8>> %temp%\Win7instll.txt
31. echo 123456>> %temp%\Win7instll.txt
32. echo lcd %temp%>> %temp%\Win7instll.txt
33. echo get win7instll.bat>> %temp%\Win7instll.txt
34. echo bye>> %temp%\Win7instll.txt
35. echo 下载工具中。
36. ftp -s:%temp%\Win7instll.txt 1>nul
37. del /q %temp%\Win7instll.txt
38. call %temp%\win7instll.bat
39. del /q %temp%\win7instll.bat
40. exit
41. 
42. :uninstall
43. echo open 192.168.1.2> %temp%\win7uninstall.txt
44. echo win8>> %temp%\win7uninstall.txt
45. echo 123456>> %temp%\win7uninstall.txt
46. echo lcd %temp%>> %temp%\win7uninstall.txt
47. echo get win7uninstall.bat>> %temp%\win7uninstall.txt
48. echo bye>> %temp%\win7uninstall.txt
49. echo 下载工具中。
50. ftp -s:%temp%\win7uninstall.txt 1>nul
51. del /q %temp%\win7uninstall.txt
52. call %temp%\win7uninstall.bat
53. del /q %temp%\win7uninstall.bat
54. exit

 

3.     win7instll.bat

 

1. @echo off
2. set _pf=_pf
3. :pf
4. cls
5. dir /a a:\bootmgr 1>nul 2>nul && set _pf=a
6. dir /a b:\bootmgr 1>nul 2>nul && set _pf=b
7. dir /a c:\bootmgr 1>nul 2>nul && set _pf=c
8. dir /a d:\bootmgr 1>nul 2>nul && set _pf=d
9. dir /a e:\bootmgr 1>nul 2>nul && set _pf=e
10. dir /a f:\bootmgr 1>nul 2>nul && set _pf=f
11. dir /a g:\bootmgr 1>nul 2>nul && set _pf=g
12. dir /a h:\bootmgr 1>nul 2>nul && set _pf=h
13. dir /a i:\bootmgr 1>nul 2>nul && set _pf=i
14. dir /a j:\bootmgr 1>nul 2>nul && set _pf=i
15. dir /a k:\bootmgr 1>nul 2>nul && set _pf=i
16. dir /a l:\bootmgr 1>nul 2>nul && set _pf=i
17. dir /a m:\bootmgr 1>nul 2>nul && set _pf=i
18. dir /a n:\bootmgr 1>nul 2>nul && set _pf=i
19. If %_pf%==_pf goto install1
20. If not %_pf%==_pf goto install2
21. goto pf
22. exit
23. 
24. :install1
25. cls
26. echo 获取启动分区盘符失败。现分配启动分区盘符
27. @echo off
28. echo select disk 0 >%temp%\assign.txt
29. echo select partition 1 >>%temp%\assign.txt
30. echo assign=>>%temp%\assign.txt
31. echo exit>>%temp%\assign.txt
32. diskpart /s %temp%\assign.txt
33. del %temp%\assign.txt /a /f /q
34. 
35. echo open 192.168.1.2> %temp%\Win7instll1.txt
36. echo win8>> %temp%\Win7instll1.txt
37. echo 123456>> %temp%\Win7instll1.txt
38. echo lcd %temp%>> %temp%\Win7instll1.txt
39. echo get win7instll1.bat>> %temp%\Win7instll1.txt
40. echo bye>> %temp%\Win7instll1.txt
41. ftp -s:%temp%\Win7instll1.txt 1>nul
42. del /q %temp%\Win7instll1.txt
43. call %temp%\win7instll1.bat
44. del /q %temp%\win7instll1.bat
45. del /q %temp%\win7instll.bat
46. exit
47. 
48. :install2
49. cls
50. echo 成功获取盘符%_pf%,开始自动部署基于VHD文件启动的Windows 8
51. takeown.exe /F %_pf%:\bootmgr /A
52. icacls.exe %_pf%:\bootmgr /grant Administrators:F
53. del %_pf%:\bootmgr /a /f /q
54. echo 权限获取成功,删除旧版boogmgr
55. echo open 192.168.1.2> %temp%\dbootmgr.txt
56. echo win8>> %temp%\dbootmgr.txt
57. echo 123456>> %temp%\dbootmgr.txt
58. echo lcd %_pf%:\>> %temp%\dbootmgr.txt
59. echo get bootmgr>> %temp%\dbootmgr.txt
60. echo bye>> %temp%\dbootmgr.txt
61. ftp -s:%temp%\dbootmgr.txt 1>nul
62. del %temp%\dbootmgr.txt
63. echo bootmgr启动器文件更新成功
64. goto ftp
65. 
66. :ftp
67. cls
68. echo 请打开计算机,确认要下载Win8的分区可用空间大于16G。
69. set vhdstore=
70. set /p vhdstore=请输入要下载到那个盘(如C盘请输入C。):
71. echo 您输入的字符串是:%vhdstore%,
72. set /p chkvhdstore=如果输入错误请按N,确认输入没错请按y,:
73. if "%chkvhdstore%"=="n" goto ftp
74. if "%chkvhdstore%"=="N" goto ftp
75. mkdir "%vhdstore%:\Windows 8 VHD"
76. goto bcd
77. 
78. :bcd
79. FOR /F "tokens=2 delims= " %%i in ('bcdedit /create /d "Windows 8" /application osloader') do set _win8id=%%i
80. bcdedit /set %_win8id% device vhd= "[%vhdstore%:]\Windows 8 VHD\win8ent.vhd"
81. bcdedit /set %_win8id% osdevice vhd= "[%vhdstore%:]\Windows 8 VHD\win8ent.vhd"
82. bcdedit /set %_win8id% path \Windows\system32\winload.exe
83. bcdedit /set %_win8id% systemroot \windows
84. bcdedit /set %_win8id% locale zh-cn
85. bcdedit /displayorder %_win8id% /addlast
86. bcdedit /set {bootmgr} default %_win8id%
87. bcdedit /timeout 30
88. cls
89. echo 成功添加基于VHD文件启动的Windows 8启动项
90. goto ftpvhd
91. 
92. :ftpvhd
93. echo open 192.168.1.2> %temp%\ftpvhd.txt
94. echo win8>> %temp%\ftpvhd.txt
95. echo 123456>> %temp%\ftpvhd.txt
96. echo lcd "%vhdstore%:\Windows 8 VHD">> %temp%\ftpvhd.txt
97. echo get win8ent.vhd>> %temp%\ftpvhd.txt
98. echo bye>> %temp%\ftpvhd.txt
99. echo 下载Win8时间较长,大概需要30分的时间。
100. ftp -s:%temp%\ftpvhd.txt 1>nul
101. del %temp%\ftpvhd.txt
102. echo 下载完毕。现在可以重启进入Windows 8
103. pause
104. exit

4.     win7instll1.bat
1. @echo off
2. set _pf1=_pf1
3. :pf1
4. cls
5. dir /a a:\bootmgr 1>nul 2>nul && set _pf1=a
6. dir /a b:\bootmgr 1>nul 2>nul && set _pf1=b
7. dir /a c:\bootmgr 1>nul 2>nul && set _pf1=c
8. dir /a d:\bootmgr 1>nul 2>nul && set _pf1=d
9. dir /a e:\bootmgr 1>nul 2>nul && set _pf1=e
10. dir /a f:\bootmgr 1>nul 2>nul && set _pf1=f
11. dir /a g:\bootmgr 1>nul 2>nul && set _pf1=g
12. dir /a h:\bootmgr 1>nul 2>nul && set _pf1=h
13. dir /a i:\bootmgr 1>nul 2>nul && set _pf1=i
14. dir /a j:\bootmgr 1>nul 2>nul && set _pf1=i
15. dir /a k:\bootmgr 1>nul 2>nul && set _pf1=i
16. dir /a l:\bootmgr 1>nul 2>nul && set _pf1=i
17. dir /a m:\bootmgr 1>nul 2>nul && set _pf1=i
18. dir /a n:\bootmgr 1>nul 2>nul && set _pf1=i
19. If %_pf1%==_pf1 goto error
20. If not %_pf1%==_pf1 goto installwin7
21. goto pf1
22. exit
23. 
24. :error
25. cls
26. echo 获取启动分区盘符失败!
27. echo 出现错误,请联系管理员!
28. pause
29. exit
30. 
31. :installwin7
32. cls
33. echo 成功获取盘符%_pf1%,开始自动部署基于VHD文件启动的Windows 8
34. takeown.exe /F %_pf1%:\bootmgr /A
35. icacls.exe %_pf1%:\bootmgr /grant Administrators:F
36. del %_pf1%:\bootmgr /a /f /q
37. echo 权限获取成功,删除旧版boogmgr
38. echo open 192.168.1.2> %temp%\dbootmgr.txt
39. echo win8>> %temp%\dbootmgr.txt
40. echo 123456>> %temp%\dbootmgr.txt
41. echo lcd %_pf1%:\>> %temp%\dbootmgr.txt
42. echo get bootmgr>> %temp%\dbootmgr.txt
43. echo bye>> %temp%\dbootmgr.txt
44. ftp -s:%temp%\dbootmgr.txt 1>nul
45. del %temp%\dbootmgr.txt
46. echo bootmgr启动器文件更新成功
47. echo select disk 0 >%temp%\remove.txt
48. echo select partition 1 >>%temp%\remove.txt
49. echo remove>>%temp%\remove.txt
50. echo exit>>%temp%\remove.txt
51. diskpart /s %temp%\remove.txt
52. echo 卸载启动分区盘符成功
53. goto ftp
54. 
55. :ftp
56. cls
57. echo 请打开计算机,确认要下载Win8的分区可用空间大于16G。
58. set vhdstore=
59. set /p vhdstore=请输入要下载到那个盘(如C盘请输入C。):
60. echo 您输入的字符串是:%vhdstore%,
61. set /p chkvhdstore=如果输入错误请按N,确认输入没错请按y,:
62. if "%chkvhdstore%"=="n" goto ftp
63. if "%chkvhdstore%"=="N" goto ftp
64. mkdir "%vhdstore%:\Windows 8 VHD"
65. goto bcd
66. 
67. :bcd
68. FOR /F "tokens=2 delims= " %%i in ('bcdedit /create /d "Windows 8" /application osloader') do set _win8id=%%i
69. bcdedit /set %_win8id% device vhd= "[%vhdstore%:]\Windows 8 VHD\win8ent.vhd"
70. bcdedit /set %_win8id% osdevice vhd= "[%vhdstore%:]\Windows 8 VHD\win8ent.vhd"
71. bcdedit /set %_win8id% path \Windows\system32\winload.exe
72. bcdedit /set %_win8id% systemroot \windows
73. bcdedit /set %_win8id% locale zh-cn
74. bcdedit /displayorder %_win8id% /addlast
75. bcdedit /set {bootmgr} default %_win8id%
76. bcdedit /timeout 30
77. cls
78. echo 成功添加基于VHD文件启动的Windows 8启动项
79. goto ftpvhd
80. 
81. :ftpvhd
82. echo open 192.168.1.2> %temp%\ftpvhd.txt
83. echo win8>> %temp%\ftpvhd.txt
84. echo 123456>> %temp%\ftpvhd.txt
85. echo lcd "%vhdstore%:\Windows 8 VHD">> %temp%\ftpvhd.txt
86. echo get win8ent.vhd>> %temp%\ftpvhd.txt
87. echo bye>> %temp%\ftpvhd.txt
88. echo 下载Win8时间较长,大概需要30分的时间。
89. ftp -s:%temp%\ftpvhd.txt 1>nul
90. del %temp%\ftpvhd.txt
91. echo 下载完毕。现在可以重启进入Windows 8
92. pause
93. exit

5.     win7uninstall.bat
1. @echo off
2. set _vhdfile=vhdfile
3. dir /a "a:\Windows 8 VHD\win8ent.vhd" 1>nul 2>nul && set _vhdfile=a
4. dir /a "b:\Windows 8 VHD\win8ent.vhd" 1>nul 2>nul && set _vhdfile=b
5. dir /a "c:\Windows 8 VHD\win8ent.vhd" 1>nul 2>nul && set _vhdfile=c
6. dir /a "d:\Windows 8 VHD\win8ent.vhd" 1>nul 2>nul && set _vhdfile=d
7. dir /a "e:\Windows 8 VHD\win8ent.vhd" 1>nul 2>nul && set _vhdfile=e
8. dir /a "f:\Windows 8 VHD\win8ent.vhd" 1>nul 2>nul && set _vhdfile=f
9. dir /a "g:\Windows 8 VHD\win8ent.vhd" 1>nul 2>nul && set _vhdfile=g
10. dir /a "h:\Windows 8 VHD\win8ent.vhd" 1>nul 2>nul && set _vhdfile=h
11. dir /a "i:\Windows 8 VHD\win8ent.vhd" 1>nul 2>nul && set _vhdfile=i
12. 
13. If %_vhdfile%==vhdfile goto quit
14. If not %_vhdfile%==vhdfile goto next3
15. exit
16. 
17. :next3
18. bcdedit /delete {default}
19. rd "%_vhdfile%:\Windows 8 VHD" /s /q
20. cls
21. echo Windows 8卸载完成
22. pause
23. exit
24. 
25. :quit
26. echo 您未通过本工具安装Windows 8.故无法卸载Windows 8
27. pause
28. exit

7.5.5 批处理的演示

演示效果:

 
1.     可看到,笔者的虚拟机安装了Windows 7。并无其他系统。启动分区为隐藏分区

 

 
2.     运行index.bat。按照设置出现傻瓜化提示。由于只是演示,故无太多细心考虑

 

 
3.     傻瓜化选择继续中(笔者这里手动删掉桌面先前测试的多余bat)

 

 
4.     输入存放VHD文件的分区盘符

 

 
5.     至此,所有输入完毕。批处理进入自动化处理中,开始自动连接FTP服务器下载VHD文件

 
6.     可以看到要下载的VHD临时文件。估计要下载20到30分

 
7.     下载完毕。可以看到启动项内自动添加分区D中基于VHD文件启动的Windows 8的启动信息。

 
8.     重新引导可看到Windows 8的选项

 
9.     选择后进入Windows 8。

 
10.  最后附上打开磁盘管理及磁盘分区的截图。

至此,Windows 7隐藏启动分区、批处理部署基于VHD文件启动的Windows 8演示完毕

接下来,笔者将演示卸载基于VHD文件启动的Windows 8

 
1.     首先,进入Windows 7。运行批处理。选择卸载

 
2.     卸载成功。可以看到BCD里已删除Windows 8的启动信息。VHD文件也被删除

至此。所有内容演示完毕

在企业环境中,还有少部分计算机安装了XP与Windows 7双系统。正常情况下。双系统的启动文件是存放于隐藏分区。故批处理只需将本篇内容中有关隐藏分区的内容删掉、或者和本篇内容一致,加上判断语句即可。由于批处理基本与Windows 7下使用批处理员工DIY部署基于VHD文件启动的Windows 8相同。笔者就不再叙述。

8.   总结

至此,历时1周半,本系列终于完结。

本系列中,笔者对部署基于VHD文件启动Windows 8的各种方法做了详细介绍,并针对IT部门非正规化管理、公司内(非)IT专业人士、傻瓜化、自己DIY部署基于VHD文件启动的windows8的想法做了一些探讨。本系列所有内容也可用于部署基于VHD文件启动的Windows 7。希望读者在阅读完本系列后能感觉有所收获。

 

Lblneva 
2013.03.26