Desmontar um arquivo VHDx montado em uma pasta?

0

Em um drive USB, eu tenho um arquivo VHDx (que é bitlocked).

Eu quero criar dois scripts para montar e desmontar rapidamente o arquivo VHDx no sistema Windows 8.

Eu quero montar a unidade em uma subpasta no meu disco usb.

Consigo escrever o script de montagem:

$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"
}

No entanto, o script de desmontagem não funciona:

$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"
}

O Dismount-VHD -Path $vhdPath envia um erro:

Dismount-VHD : Élément N:_private\crypted.vhdx introuvable.

(pode ser traduzido para algo como item N:\_private\crypted.vhdx introuvable cannot be found )

Eu também tento com Dismount-VHD -Path $mountPath , mas recebo outra exceção:

Dismount-VHD : Le paramètre n’est pas valide. « N:\Data » n’est pas un fichier de disque dur virtuel existant.

(tradução: Parâmetro inválido: n: \ Data não é um arquivo de disco)

Qual é a maneira correta de desmontar um arquivo VHD?

    
por Steve B 26.07.2013 / 10:34

1 resposta

0

Com a ajuda de um thread de technet, Eu finalmente fiz meus scripts funcionarem:

Os scripts finais de trabalho são estes:

Mount.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"
}

Desmontar.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"
}

Codifiquei o código do volume no meu script de montagem. Se alguém souber uma maneira de obter isso automaticamente, eu apreciaria.

Mas eu posso viver com isso agora, porque meu volume é sempre o mesmo.

    
por 06.08.2013 / 10:20