卸载文件夹中安装的 VHDx 文件?

卸载文件夹中安装的 VHDx 文件?

在 USB 驱动器上,我有一个 VHDx 文件(已进行位锁定)。

我想创建两个脚本来在 Windows 8 系统上快速挂载和卸载 VHDx 文件。

我想将驱动器安装到我的 USB 磁盘的子文件夹中。

我成功编写了挂载脚本:

$scriptDir = Split-Path($MyInvocation.MyCommand.Definition)

$vhdPath = Join-Path $scriptDir "\_private\crypted.vhdx"
$mountPath = Join-Path $scriptDir "\Data"

if(-not (Get-ChildItem $mountPath -Force)) # check if not already mounted
{
    Mount-VHD -NoDriveLetter -Path $mountPath
}
else{
    Write-Warning "Already mounted"
}

但是,卸载脚本不起作用:

$scriptDir = Split-Path($MyInvocation.MyCommand.Definition)

$vhdPath = Join-Path $scriptDir "\_private\crypted.vhdx"
$mountPath = Join-Path $scriptDir "\Data"

if(Get-ChildItem $mountPath) # check if not already mounted
{
    Dismount-VHD -Path $vhdPath
}
else{
    Write-Warning "Not mounted"
}

抛出Dismount-VHD -Path $vhdPath错误:

Dismount-VHD:元素 N:_private\crypted.vhdx 可引导。

(可以翻译成类似item N:\_private\crypted.vhdx introuvable cannot be found

我也尝试使用Dismount-VHD -Path $mountPath,但出现另一个异常:

Dismount-VHD:该参数无效。 “N:\Data” 不是真实存在的下载文件。

(翻译:无效参数:n:\Data 不是磁盘文件)

卸载 VHD 文件的正确方法是什么?

答案1

technet 线程,我终于让我的脚本运行起来了:

最终的工作脚本如下:

安装.ps1:

$scriptDir = Split-Path($MyInvocation.MyCommand.Definition)

$vhdPath = Join-Path $scriptDir "\_private\crypted.vhdx"
$mountPath = Join-Path $scriptDir "\Data"

if(-not (Get-ChildItem $mountPath -ea SilentlyContinue)) # check if not already mounted
{
    $diskPartScriptContent = @( 
        "select vdisk file=$vhdPath", 
        "attach vdisk"
        )
    $diskPartScriptFile = Join-Path $scriptDir "_diskpart.tmp"
    Set-Content  -Path $diskPartScriptFile -Value $diskPartScriptContent
    $result = (& diskpart.exe /s $diskPartScriptFile)

    & mountvol n:\data "\\?\Volume{820c8453-f504-11e2-bedd-9e2cd2a4b688}"

}
else{
    Write-Warning "Already mounted"
}

卸载.ps1:

$scriptDir = Split-Path($MyInvocation.MyCommand.Definition)

$vhdPath = Join-Path $scriptDir "\_private\crypted.vhdx"
$mountPath = Join-Path $scriptDir "\Data"

if(Get-ChildItem $mountPath -ea SilentlyContinue) # check if not already mounted
{
    $diskPartScriptContent = @( 
        "select vdisk file=$vhdPath", 
        "detach vdisk"
        )
    $diskPartScriptFile = Join-Path $scriptDir "_diskpart.tmp"
    Set-Content  -Path $diskPartScriptFile -Value $diskPartScriptContent
    & diskpart.exe /s $diskPartScriptFile
    & mountvol $mountPath /d

}
else{
    Write-Warning "Not mounted"
}

我在挂载脚本中硬编码了卷 ID。如果有人知道如何自动获取此信息,我将不胜感激。

但我现在可以忍受这种情况,因为我的音量始终保持不变。

相关内容