Ventoy多系统盘日常使用,快速挂载任意VHD文件到主系统

在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)

找到该文件,运行

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值