На USB-накопителе у меня есть файл VHDx (который заблокирован).

Я хочу создать два сценария для быстрого монтирования и размонтирования файла VHDx в системе Windows 8.

Я хочу смонтировать диск в подпапке на моем 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"
}

Однако скрипт dismount не работает:

$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: Le paramètre n'est pas valide. «N:\Data» не существует.

(перевод: Неверный параметр: n:\Data не является дисковым файлом)

Как правильно отключить VHD-файл?

1 ответ1

0

С помощью нити technet я наконец-то заставил свои скрипты работать:

Окончательные рабочие сценарии:

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

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

Я жестко закодировал идентификатор тома в своем скрипте монтирования. Если кто-то знает способ получить это автоматически, я был бы признателен.

Но теперь я могу жить с этим, потому что мой объем всегда один и тот же.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .