当前位置: 首页 > news >正文

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两个补丁在更新完成后系统中并未找到,直接安装这两个补丁,提示不适用。

相关文章:

  • mysql乱码问题解决办法
  • (转)利用ant在Mac 下自动化打包签名Android程序
  • 动态定义二维数组的方法
  • Data Domain虚拟带库(VTL)的部署和实施
  • 在VMM2012R2中使用二代虚拟机创建的模板无法创建虚拟机的解决方法
  • C#获取url中参数键值对的方法
  • 零点起飞学HTML+CSS
  • linux下-scp不需要密码,简历相互信任关系
  • SmartWatch2开发-Control API简介
  • 高效使用Bitmaps(二) 后台加载Bitmap
  • 基础类BaseViewController
  • IP-SAN实验笔记
  • Node.app – 用于 iOS App 开发的 Node.js 解释器
  • Python机器学习——线性模型
  • 不用图片,纯Css3实现超酷的类似iphone的玻璃气泡效果
  • (十五)java多线程之并发集合ArrayBlockingQueue
  • CSS盒模型深入
  • Java超时控制的实现
  • mac修复ab及siege安装
  • Sublime text 3 3103 注册码
  • vue 配置sass、scss全局变量
  • 阿里云购买磁盘后挂载
  • 面试题:给你个id,去拿到name,多叉树遍历
  • 浅谈Kotlin实战篇之自定义View图片圆角简单应用(一)
  • 微信开放平台全网发布【失败】的几点排查方法
  • 想晋级高级工程师只知道表面是不够的!Git内部原理介绍
  • 怎么把视频里的音乐提取出来
  • 正则与JS中的正则
  • No resource identifier found for attribute,RxJava之zip操作符
  • #【QT 5 调试软件后,发布相关:软件生成exe文件 + 文件打包】
  • #stm32驱动外设模块总结w5500模块
  • $var=htmlencode(“‘);alert(‘2“); 的个人理解
  • (32位汇编 五)mov/add/sub/and/or/xor/not
  • (Arcgis)Python编程批量将HDF5文件转换为TIFF格式并应用地理转换和投影信息
  • (delphi11最新学习资料) Object Pascal 学习笔记---第2章第五节(日期和时间)
  • (二)Linux——Linux常用指令
  • (附源码)php新闻发布平台 毕业设计 141646
  • (黑马出品_高级篇_01)SpringCloud+RabbitMQ+Docker+Redis+搜索+分布式
  • (三)Pytorch快速搭建卷积神经网络模型实现手写数字识别(代码+详细注解)
  • (转)chrome浏览器收藏夹(书签)的导出与导入
  • ***微信公众号支付+微信H5支付+微信扫码支付+小程序支付+APP微信支付解决方案总结...
  • .NET Core实战项目之CMS 第十二章 开发篇-Dapper封装CURD及仓储代码生成器实现
  • .NET MVC、 WebAPI、 WebService【ws】、NVVM、WCF、Remoting
  • .net 开发怎么实现前后端分离_前后端分离:分离式开发和一体式发布
  • .Net 中Partitioner static与dynamic的性能对比
  • .vue文件怎么使用_vue调试工具vue-devtools的安装
  • /dev/sda2 is mounted; will not make a filesystem here!
  • @SpringBootApplication 包含的三个注解及其含义
  • [ linux ] linux 命令英文全称及解释
  • [2019.3.20]BZOJ4573 [Zjoi2016]大森林
  • [BZOJ 3282] Tree 【LCT】
  • [BZOJ] 2006: [NOI2010]超级钢琴
  • [EFI]Atermiter X99 Turbo D4 E5-2630v3电脑 Hackintosh 黑苹果efi引导文件
  • [HarekazeCTF2019]encode_and_encode 不会编程的崽
  • [JS入门到进阶] 哎,被vite小坑了一波,大家记得配置build.cssTarget为‘chrome61‘