在U盘某目录下新建MountVHD.txt文件(笔者放置于根目录下)
将以下代码复制进去
# 1. 显示目录下的vhd文件,计入变量中
$vhdFiles = Get-ChildItem -Recurse -Filter *.vhd -Path .\0ImageFiles
# 显示进度条
$totalVhdCount = $vhdFiles.Count
$processedCount = 0
Write-Progress -Activity "正在检测VHD文件" -Status "已处理 $processedCount 个文件 / 共 $totalVhdCount 个文件" -PercentComplete 0
# 将检测到的vhd依次判断,是否已经被挂载过了
$mountedVhds = @()
$unmountedVhds = @()
foreach ($vhd in $vhdFiles) {
$vhdInfo = Get-VHD -Path $vhd.FullName
if ($vhdInfo.Attached -eq $true) {
$mountedVhds += $vhd
Write-Host "$($vhd.Name) 已挂载"
}
else {
$unmountedVhds += $vhd
Write-Host "$($vhd.Name) 未挂载"
}
# 更新进度条
$processedCount++
$percentComplete = [math]::Round(($processedCount / $totalVhdCount) * 100)
Write-Progress -Activity "正在检测VHD文件" -Status "已处理 $processedCount 个文件 / 共 $totalVhdCount 个文件" -PercentComplete $percentComplete
}
# 完成时清除进度条
Write-Progress -Activity "正在检测VHD文件" -Status "已处理 $processedCount 个文件 / 共 $totalVhdCount 个文件" -Completed
# 判断全是已挂载或全是未挂载的情况
if ($mountedVhds.Count -eq 0) {
Write-Host "所有 VHD 文件均未挂载"
$action = 'm'
}
elseif ($unmountedVhds.Count -eq 0) {
Write-Host "所有 VHD 文件均已挂载"
$action = 'u'
}
else {
# 用户选择挂载或卸载
$action = Read-Host "输入 'm' 挂载,'u' 卸载,或输入 'q' 退出"
if ($action -eq 'q') {
exit
}
}
# 选择挂载或卸载的vhd文件
if ($action -eq 'm') {
$eligibleVhds = $unmountedVhds
}
elseif ($action -eq 'u') {
$eligibleVhds = $mountedVhds
}
# 显示符合条件的vhd文件并加上序号
Write-Host "符合条件的 VHD 文件:"
for ($i = 0; $i -lt $eligibleVhds.Count; $i++) {
Write-Host "$($i + 1): $($eligibleVhds[$i].Name)"
}
# 用户选择要处理的VHD文件
do {
$vhdIndex = Read-Host "请选择要处理的VHD文件的序号 (1-$($eligibleVhds.Count)),或输入 'q' 退出"
if ($vhdIndex -eq 'q') {
exit
}
$vhdIndex = [int]$vhdIndex
if ($vhdIndex -ge 1 -and $vhdIndex -le $eligibleVhds.Count) {
$selectedVhd = $eligibleVhds[$vhdIndex - 1]
}
else {
Write-Host "无效的选择,请重新输入"
}
} while ($selectedVhd -eq $null)
# 根据用户选择执行挂载或卸载
if ($action -eq 'm') {
Mount-VHD -Path $selectedVhd.FullName
Write-Host "$($selectedVhd.Name) 已挂载"
}
elseif ($action -eq 'u') {
Dismount-VHD -Path $selectedVhd.FullName
Write-Host "$($selectedVhd.Name) 已卸载"
}
注意,".\0ImageFiles"可以换成自己想要寻找的vhd目录,脚本会从该目录下开始寻找所有"*.VHD"
尽量不要使用绝对路径,这样会导致将U盘插入其他电脑也许会出现盘符更改导致错误。
随后保存,将文件名称改为 MountVHD.ps1
使用时,右键单击桌面左下角win图标
点击Windows PowerShell(管理员)(A)
找到该文件,运行