У меня есть ISO-образ (в данном случае MS Office ISO), который я хочу смонтировать.
Я хотел бы использовать Powershell и указать назначение буквы диска во время монтирования, чтобы я мог использовать команды сценариев для файлов на смонтированном ISO (диске), после чего я хотел бы демонтировать ISO.
Как это можно сделать?
Предыстория: Я хочу выполнить сценарий установки MS Office, используя ISO-образ.
Следующие команды Powershell монтируют указанный образ ISO в указанный буква диска. Команда mountvol требует повышения прав, поэтому запустите Powershell от имени администратора :
# ISO image - replace with path to ISO to be mounted
$isoImg = "D:\en_visio_professional_2019_x86_x64_dvd_3b951cef.iso"
# Drive letter - use desired drive letter
$driveLetter = "Y:"
# Mount the ISO, without having a drive letter auto-assigned
$diskImg = Mount-DiskImage -ImagePath $isoImg -NoDriveLetter
# Get mounted ISO volume
$volInfo = $diskImg | Get-Volume
# Mount volume with specified drive letter (requires Administrator access)
mountvol $driveLetter $volInfo.UniqueId
#
#
# Do work (e.g. MS Office installation - omitted for brevity)
#
#
# Unmount drive
DisMount-DiskImage -ImagePath $isoImg
Справочная информация: это была полезная ссылка: https://www.derekseaman.com/2010 /04/change-volume-drive-letter-with.html
Я не мог заставить вышеупомянутое работать (Powershell 5 на WS2016), это перестало работать на...
mountvol $driveLetter $volInfo.UniqueId
... Несмотря на то, чтобы быть выполненным как Администратор.
, Но это действительно работало
Get-WmiObject -Class Win32_volume -Filter 'DriveType=5' |
Select-Object -First 1 |
Set-WmiInstance -Arguments @{DriveLetter='Z:'}
также можно пропустить доступ через букву диска, например:
$imgDevice = Mount-DiskImage -ImagePath 'C:\SomeIso.iso' -NoDriveLetter -PassThru;
# dir content - do note the added ending backslash:
Get-ChildItem "$($imgDevice.DevicePath)\"
Это рабочая версия (по крайней мере для меня)
$isoImg = "C:\OrdinaDBA\ISO\en_sql_server_2019_developer_x64_dvd_baea4195.iso"
$driveLetter = "X:\" # note the added ending backslash: mount fails if its not there :(
#Check if elevated
[Security.Principal.WindowsPrincipal]$user = [Security.Principal.WindowsIdentity]::GetCurrent();
$Admin = $user.IsInRole([Security.Principal.WindowsBuiltinRole]::Administrator);
if ($Admin)
{
Write-Host "Administrator rights detected, continuing install.";
Write-Host "Mount the ISO, without having a drive letter auto-assigned";
$diskImg = Mount-DiskImage -ImagePath $isoImg -NoDriveLetter -PassThru;
#Write-Host "Get mounted ISO volume";
$volInfo = $diskImg | Get-Volume
#Write-Host "Mount volume with specified drive letter";
mountvol $driveLetter $volInfo.UniqueId
#Start-Sleep -Seconds 1
#<do work>
#Start-Sleep -Seconds 1
Write-Host "DisMount ISO volume";
DisMount-DiskImage -ImagePath $isoImg # not used because SQL install is in an other powershell session
Write-Host "Done";
exit 0;
}
else
{
Write-Error "This script must be executed as Administrator.";
exit 1;
}
Здесь вы можете найти всю информацию о командлете Get-DiskImage: Get-DiskImage
Эта команда дает вам букву диска:
(Get-DiskImage -ImagePath "E:\vhd1.vhdx" | Get-Disk | Get-Partition | Get-Volume).DriveLetter