一、现有如下需求:
1.分行有20台左右瘦客户机,一台文员机;
2.在总部可以通过控制台(控制软件)统一管理控制这20台瘦客户机,文员机可以通过远程桌面控制
3.现需要统一给分行这20台瘦客户机升级系统
二、解决思路
1.将新系统(Ghost文件)先发送到分行文员机(通过FTP)。
2.20台瘦客户机通过控制台下发批处理,批处理动作:先从瘦客户机压缩出一个8G左右的盘,用于放新系统Ghost文件;再在瘦客户机
创建一个WinPE启动项,系统重启后进入WinPE,自动调用Ghost64应用程序执行系统Ghost;
三、实施
第一步:文员机搭建FTP(这步简单,系统自带FTP或下载一个FTP软件都可以),设置FTP用户名,密码分别为test,test1;
新系统Ghost文件放在FTP根目录的SystemISO文件夹下,命名为sys.gho。
第二步:瘦客户机压缩8G盘脚本
:diskpart
rem 1.将硬盘改为两个分区,一个系统分区,一个8G的用于放系统的备用分区
rem 2.只对中文系统存在一个硬盘且只有主要,扩展,逻辑这三种分区作过测试
rem 3.处理流程:第一步获取磁盘信息保存到diskpart.txt文本,第二步从文本中筛选出分区信息,删除非第一分区,恢复分区以外的其它分区,再进行扩盘,压缩,新建
::开启windows磁盘管理相关服务
net start defragsvc
::导出磁盘列表放到diskpartLog.txt
echo>diskpart1.script select disk 0
echo>>diskpart1.script list partition
echo>>diskpart1.script exit
diskpart /s diskpart1.script >diskpartLog.txt
::根据磁盘列表信息,删除非第一分区,恢复分区以外的其他分区(即只保留C盘系统分区)
echo>diskpart2.script select disk 0
for /f "tokens=1,2,3,4" %%a in (diskpartLog.txt) do if %%a == 分区 (if not %%d==大小 (if not %%C==恢复 (if %%b gtr 1 (echo>>diskpart2.script select partition=%%b
echo>>diskpart2.script delete partition noerr))))
for /f "tokens=1,3" %%a in (diskpartLog.txt) do if %%a == 分区 (if %%b==扩展的 (echo>>diskpart2.script select partition=0
echo>>diskpart2.script delete partition noerr))
::先整合然后压缩一个8G的D盘
echo>>diskpart2.script select partition=1
echo>>diskpart2.script extend noerr
echo>>diskpart2.script shrink desired=8000 noerr
echo>>diskpart2.script create partition primary noerr
echo>>diskpart2.script format fs=ntfs label="D" quick noerr
echo>>diskpart2.script assign letter=d noerr
echo>>diskpart2.script Exit
diskpart <diskpart2.script >>diskpartLog.txt
del /f /q *.script
第三步:制作WinPE.wim系统并添加Ghost.exe应用程序
1)先官网下载Windows ADK及对应的Windows PE加载项(要联网下载,需要点时间),安装完成后,右键以管理员身份运行“部署和镜像工具环境”,输入
”copype amd64 D:\WinPE“ 复制WinPE文件(64位WinPE)到D盘WimPE目录。
2)这里我们主要要用到的是Windows PE启动镜像boot.wim,它位于上一步所获得的WinPE文件夹下,路径为:D:\WinPE\media\sources\boot.wim,接下来是操作
这个PE启动镜像文件boot.wim,主要操作两个,一个是将Ghost64.exe应用程序复制进去,再一个是编辑这个PE的启动脚本(startnet.cmd)让PE启动后自动运行Ghost64.exe程序,执行系统恢复。
先挂载boot.wim:
复制Ghost64.exe应用程序到PE中
编辑PE启动脚本
编辑完startnet.cmd后记得,保存退出。
重新封装启动镜像boot.wim
boot.wim封装好后,复制一份到文员电脑FTP的根目录下SystemISO文件夹下,并改成Win10PE.wim;
第四步:在现有系统中添加WinPE启动项
bcdedit /create {ramdiskoptions}
bcdedit /set {ramdiskoptions} ramdisksdidevice partition=C:
bcdedit /set {ramdiskoptions} ramdisksdipath \boot\boot.sdi
::以上是在现有系统BCD存储中创建WinPE启动所需的{ramdiskoptions}对象,没有这个启动WinPE会蓝屏
for /f "tokens=2" %%a in ('bcdedit /create /d "Win10PE" /application osloader') do (
bcdedit /set %%a device ramdisk=[C:]\Boot\Win10PE.wim,{ramdiskoptions}
bcdedit /set %%a path \windows\system32\winload.exe
bcdedit /set %%a osdevice ramdisk=[C:]\Boot\Win10PE.wim,{ramdiskoptions}
bcdedit /set %%a systemroot \windows
bcdedit /set %%a winpe yes
bcdedit /set %%a detecthal yes
bcdedit /set %%a inherit {bootloadersettings}
bcdedit /set %%a ems yes
bcdedit /displayorder %%a /addfirst
bcdedit /default %%a
bcdedit /timeout 2)
好了,到这里基本都完成了,最后附上全部脚本代码:
@echo off&setlocal enabledelayedexpansion&title AutoInstallSystem
rem:设置开关用于防误操作
if not [%1] == [yes] (goto :eof)
:diskpart
rem 1.将硬盘改为两个分区,一个系统分区,一个8G的用于放系统的备用分区
rem 2.只对中文系统存在一个硬盘且只有主要,扩展,逻辑这三种分区作过测试
rem 3.处理流程:第一步获取磁盘信息保存到diskpart.txt文本,第二步从文本中筛选出分区信息,删除非第一分区,恢复分区以外的其它分区,再进行扩盘,压缩,新建分区;
if not exist c:\autoinstallSys (mkdir c:\autoInstallSys)
cd /d C:\autoInstallSys
net start defragsvc
echo>diskpart1.script select disk 0
echo>>diskpart1.script list partition
echo>>diskpart1.script exit
diskpart /s diskpart1.script >diskpartLog.txt
echo>diskpart2.script select disk 0
for /f "tokens=1,2,3,4" %%a in (diskpartLog.txt) do if %%a == 分区 (if not %%d==大小 (if not %%C==恢复 (if %%b gtr 1 (echo>>diskpart2.script select partition=%%b
echo>>diskpart2.script delete partition noerr))))
for /f "tokens=1,3" %%a in (diskpartLog.txt) do if %%a == 分区 (if %%b==扩展的 (echo>>diskpart2.script select partition=0
echo>>diskpart2.script delete partition noerr))
echo>>diskpart2.script select partition=1
echo>>diskpart2.script extend noerr
echo>>diskpart2.script shrink desired=8000 noerr
echo>>diskpart2.script create partition primary noerr
echo>>diskpart2.script format fs=ntfs label="D" quick noerr
echo>>diskpart2.script assign letter=d noerr
echo>>diskpart2.script Exit
diskpart <diskpart2.script >>diskpartLog.txt
del /f /q *.script
:ftp
rem:1.先D盘创建一个目录用于保存gho文件,WinPE文件,Log文件
rem:2.通过FTP获取文件
if not exist D:\autoInstallSys\sysISO (mkdir D:\autoInstallSys\sysISO)
if not exist D:\autoInstallSys\WinPE (mkdir D:\autoInstallSys\WinPE)
if not exist D:\autoInstallSys\Logs (mkdir D:\autoInstallSys\Logs)
xcopy C:\autoInstallSys\diskpartLog.txt D:\autoInstallSys\Logs /q /y
for /f "tokens=15" %%a in ('ipconfig ^| findstr /i .254') do (
set ip=%%a
echo>ftp.script open !ip:254=10!
::上面这部操作是获取文员电脑的IP地址并打开FTP
echo>>ftp.script test
echo>>ftp.script test1
echo>>ftp.script binary
echo>>ftp.script cd SystemISO
echo>>ftp.script prompt off
echo>>ftp.script lcd D:\autoInstallSys\sysISO
echo>>ftp.script get sys.gho
echo>>ftp.script lcd D:\autoInstallSys\WinPE
echo>>ftp.script get Win10PE.wim
echo>>ftp.script close
echo>>ftp.script bye
ftp -s:ftp.script > D:\autoInstallSys\Logs\ftpLog.txt
del /f /q *.script)
:sysInstall
rem:先简单验证文件是否存在
if not exist D:\autoInstallSys\sysISO\sys.gho (Echo Not Find sys.gho! > D:\autoInstallSys\Logs\sysInstallLog.txt&goto :eof)
if not exist D:\autoInstallSys\WinPE\Win10PE.wim (Echo Not Find Win10PE.wim! >> D:\autoInstallSys\Logs\sysInstallLog.txt&goto :eof)
xcopy D:\autoInstallSys\WinPE\Win10PE.wim C:\Boot /q /y
bcdedit /create {ramdiskoptions}
bcdedit /set {ramdiskoptions} ramdisksdidevice partition=C:
bcdedit /set {ramdiskoptions} ramdisksdipath \boot\boot.sdi
for /f "tokens=2" %%a in ('bcdedit /create /d "Win10PE" /application osloader') do (
bcdedit /set %%a device ramdisk=[C:]\Boot\Win10PE.wim,{ramdiskoptions}
bcdedit /set %%a path \windows\system32\winload.exe
bcdedit /set %%a osdevice ramdisk=[C:]\Boot\Win10PE.wim,{ramdiskoptions}
bcdedit /set %%a systemroot \windows
bcdedit /set %%a winpe yes
bcdedit /set %%a detecthal yes
bcdedit /set %%a inherit {bootloadersettings}
bcdedit /set %%a ems yes
bcdedit /displayorder %%a /addfirst
bcdedit /default %%a
bcdedit /timeout 2)
shutdown /r /f /t 1
goto :eof