在 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。如果有人知道如何自动获取此信息,我将不胜感激。
但我现在可以忍受这种情况,因为我的音量始终保持不变。