VHD_Update_diskpart
###################功能说明#####################
###该脚本用来对离线VHD文件更新,导入系统补丁####
################################################
#####################################################实现过程#####################################################
#1.使用Diskpart命令挂载VHD文件,该VHD必须包含系统保留分区,OS默认所在第二个分区 #
#2.使用DISM命令将补丁更新(.cab、.msu)导入到VHD文件中,并将日志输出到当前目录下 #
#3.卸载VHD文件 #
##################################################################################################################
#指定VHD文件存放位置
$VHD_File = "e:\vhd\test\win2008r2.vhdx"
#指定补丁文件存放位置
$Updates_Folder = "E:\vhd\Kb"
#指定VHD挂载后的OS分区盘符
$DriveLetter = "U"
#DISM命令日志存放于当前脚本目录下
$CurrentPath = $MyInvocation.MyCommand.Path.substring(0,$MyInvocation.MyCommand.Path.LastIndexOf('\')+1)
#$today = Get-Date -UFormat "%Y%m%d"
#如果将dism过程输出到Log,则当前屏幕无显示
#$DISM_Log = $CurrentPath+"Dism_$today.txt"
#使用Diskpart命令挂载VHD ,并指定盘符(注:该VHD必须包含系统保留分区,否则所选择的分区会不正确,需要使用 partition 1)
Function Diskpart_Mount ($DriveLetter,$VHD_File)
{
$now = get-date -format 'yyyyMMddHHmm'
$dpmountcmd_ScriptName = "DPMount_script_" + $now + ".txt"
$dpmountcmd_ScriptPath = Join-Path -Path $CurrentPath -ChildPath $dpmountcmd_ScriptName
$dpmountcmd = @()
$dpmountcmd += ("Select Vdisk file" + " = """ + $VHD_File + """")
$dpmountcmd += ("Attach Vdisk")
#系统保留分区默认为Partition 1,OS所在分区默认为Partition 2
$dpmountcmd += ("Select Partition 2")
$dpmountcmd += ("Assign letter=" + $DriveLetter)
$dpmountcmd += ("Exit")
Set-Content -Path $dpmountcmd_ScriptPath -Value $dpmountcmd
Diskpart -s $dpmountcmd_ScriptPath
}
#使用Diskpart命令卸载VHD
Function Diskpart_Unmount ($VHD_File)
{
$now = get-date -format 'yyyyMMddHHmm'
$dpunmountcmd_ScriptName = "DPUnmount_script_" + $now + ".txt"
$dpunmountcmd_ScriptPath = Join-Path -Path $CurrentPath -ChildPath $dpunmountcmd_ScriptName
$dpunmountcmd = @()
$dpunmountcmd += ("Select Vdisk file" + " = """ + $VHD_File + """")
$dpunmountcmd += ("Detach Vdisk")
$dpunmountcmd += ("Exit")
Set-Content -Path $dpunmountcmd_ScriptPath -Value $dpunmountcmd
Diskpart -s $dpunmountcmd_ScriptPath
}
#生成添加补丁更新的DISM命令
Function Add_Updates ($Updates_Folder)
{
$Updates = gci $Updates_Folder |? {$_.Extension -eq ".msu" -or $_.Extension -eq ".cab"} |Select Fullname
Foreach ($Update in $Updates)
{
$DISMcmd += "dism /Image:" + $letter + " /Add-Package /PackagePath:" + $Update.Fullname + " /IgnoreCheck" + "`n"
}
Return $DISMcmd
}
#挂载VHD文件,导入补丁更新
Diskpart_Mount $DriveLetter $VHD_File
#判断所指定的分区是否为OS所在分区
$letter = $DriveLetter + ":\"
$Path_Win = Join-Path -Path $letter -ChildPath "Windows"
$Path_ProgramFiles = Join-Path -Path $letter -ChildPath "Program Files"
If ( (Test-Path -Path $Path_Win) -and ( Test-Path -Path $Path_ProgramFiles) )
{
$DISMcmds = Add_Updates $Updates_Folder
$DISMcmds
Invoke-Expression $DISMcmds #|Out-File $DISM_Log -Append
Diskpart_Unmount $VHD_File
}
Else
{
$ws = New-Object -ComObject WScript.Shell
$ws.popup("VHD盘符不正确,请重新指定!")
}
################################
补丁更新完成后,如果某些补丁并未提示“不适用”,显示已成功,也有可能是真的不适用该系统,无法安装成功,如下图中的KB975560和KB2425227两个补丁在更新完成后系统中并未找到,直接安装这两个补丁,提示不适用。
VHD_Update_diskpart的更多相关文章
随机推荐
- Control File (二)重建CONTROLFILE --- NORESETLOG
create controlfile --- noresetlog 由于丢失control01.ctl alter_karl.log 中显示: -------------------------- ...
- 嵌入式 hi3518c下ramdisk文件系统与文件系统烧写以及uboot中change-the-env
NULL RAM : mkdir ramdisk_test 临时挂在点 dd if=/dev/zero of=123 bs=1k count=10000 建立空硬盘 losetup /dev/loo ...
- redis配置实例及redis.conf详细说明
一.配置实例 1.redis修改持久化路径.日志路径.清缓存 redis修改持久化路径和日志路径 vim redis.conf logfile /data/redis_cache/logs/redi ...
- Mysql 多表联合查询效率分析及优化
1. 多表连接类型 1. 笛卡尔积(交叉连接) 在MySQL中可以为CROSS JOIN或者省略CROSS即JOIN,或者使用',' 如: SELECT * FROM table1 CROSS JO ...
- delphi 设置表格样式。
//设置表格样式 wordDoc.Tables.Item(1).Borders.Item(Word.WdBorderType.wdBorderLeft).LineStyle = Word.WdLine ...
- 多线程下OpenCV操作的问题
问题:在OpenCV中,使用cvCaptureFromAVI打开一个视频文件后,并使用cvReleaseCapture释放关闭它后.再开启一个线程使用cvCaptureFromAVI打开一个视频文件, ...
- CSS:7个你可能不认识的单位
原文:7 CSS Units You Might Not Know About 众所周知,当使用CSS技术的时候,很容被一些奇异问题给困住.而当我们面对新的问题时,这会让我们处于非常不利的位置. 但是 ...
- JQuery:各种操作表单元素方法小结
来源:http://www.ido321.com/1220.html 表单元素无处不在,已然成了Web应用不可或缺的一个部分.对表单最最最常见的操作就是获取表单元素的值或者更改表单元素的值.那在JQu ...
- 如何阅读Java源码
刚才在论坛不经意间,看到有关源码阅读的帖子.回想自己前几年,阅读源码那种兴奋和成就感(1),不禁又有一种激动.源码阅读,我觉得最核心有三点:技术基础+强烈的求知欲+耐心. 说到技术基础,我打个比方吧, ...
- [Hive - LanguageManual] Alter Table/Partition/Column
Alter Table/Partition/Column Alter Table Rename Table Alter Table Properties Alter Table Comment Add ...