Как я могу смонтировать ISO через PowerShell / программно?

28

Как я могу монтировать и отключать ISO-образы из PowerShell в Windows 8 без сторонних программ?

Оригинальная версия этого вопроса заставила меня задуматься, возможно ли смонтировать ISO-образ через PowerShell в Windows 8.

Таннер Фолкнер
источник

Ответы:

46

Смонтируйте ISO из командной строки (только для Windows 8/2012 и выше)

Если вы сидите в командной строке и хотите смонтировать ISO, выполните следующую команду:

PowerShell Mount-DiskImage

Это вызовет командлет PowerShell. Вам будет предложено указать путь к ISO-образу, который вы хотите смонтировать. Когда вы закончите, оставьте последний пустой и нажмите Enter.

выполнение командлета Mount-DiskImage

Тада! Это установлено:

Тада!  Монтируется - «Устройства со съемным хранилищем»

Демонтировать ISO

Чтобы отключить ISO из PowerShell, запустите Dismount-DiskImageи следуйте инструкциям. Если вы знаете только букву диска в верхней части головы, а не путь к изображению, используйте эту команду:

Get-Volume [Drive Letter] | Get-DiskImage | Dismount-DiskImage

Эта команда захватит указанный вами диск, найдет образ диска и отключит его.

«Устройства со съемным хранилищем» после демонтажа ISO

Монтирование нескольких ISO и отображение букв дисков

Вы также можете использовать этот -PassThruфлаг для хранения данных, переданных команде. Давайте смонтируем несколько ISO-образов, отобразим их буквы дисков, запустим файл на одном из дисков, а затем отключим все ISO-образы.

Смонтировать ISO

 $MountedISOs=Mount-DiskImage -PassThru D:\Downloads\Ubuntu.iso,D:\Downloads\Windows8.iso,D:\Downloads\Server2012.iso

Отображение информации о громкости для каждого ISO, установленного с помощью foreachпетли

 foreach($iso in $MountedISOs){Get-Volume -DiskImage $iso}     

Список J диск

 ls J:\

Открыть файл

 start wubi.exe

вывод foreach / Get-Volume и ls

Чтобы отключить ISO, используйте следующую команду:

 Dismount-DiskImage $MountedISOs.ImagePath

Тестирование ISO

Чтобы создать простой сценарий, который проверяет, подключен ли ISO-файл и является ли он действительно (по сравнению с VHD), я хотел бы использовать его -PassThruдля временного хранения объекта и использовать Get-DiskImageкоманду для обновления состояния объекта DiskImage. Это обновит Attachedсвойство. StorageTypeСвойство будет сказать, является ли файл является ISO или VHD в соответствии с его расширением файла.

используя <code> -PassThru </ code> и <code> Get-DiskImage </ code>

StorageTypeИз VHD 2, где ISO возвратит 1. Вот вывод $UbuntuISO:
Вот вывод <code> $ UbuntuISO </ code>

Это вывод $tempпосле монтирования VHD: ( Mount-DiskImageтакже может монтировать VHD!)
вывод <code> $ temp </ code> после монтирования виртуального жесткого диска

Обратите внимание, что Attachedсвойство выше False, несмотря на то, что Mount-DiskImageкоманда работает без заминки.

Имейте в виду, что $UbuntuISOпеременная также не будет обновляться:
переменная <code> $ UbuntuISO </ code> не обновляется


Technet: Mount-DiskImage

Technet: Dismount-DiskImage

Таннер Фолкнер
источник
6
Черт, со всеми этими новыми командлетами в PowerShell Windows 8 начинает щекотать.
sinni800
1
Мы можем легко смонтировать образ с помощью команды C:\>explorer.exe imagepath, здесь нам не нужен PS, но для размонтирования нам нужен PS.
Avirk
3
Все ли внутри Windows 8? Я имею в виду, вам не нужно устанавливать другие программы ???
Серуш
2
+1 Очень мило на самом деле! Это было именно то, что я надеялся найти в Win8, чтобы я мог добавить его в конец моего ответа здесь , но вы избавили меня от проблем. Мне действительно нужно начать улучшать свои навыки PS. :) Редактировать: есть ли командлет для проверки внутренних данных и отчета о том, является ли файл ISO или VHD или что-то еще, что не поддерживается? Или, может быть, способ проверить возвращаемое значение Mount-DiskImage, возможно, чтобы код мог быть разветвлен соответственно?
Каран
1
@Karan Наконец-то дошло до выяснения этого = D Он не собирается проверять мужество, и, честно говоря, я думаю, что это излишне. Но он сообщит нам, если он смонтирован и ISO VHD без погружения в обработку ошибок PowerShell.
Таннер Фолкнер
3

Обычно, если вы хотите сделать это через командную строку, вам нужен неинтерактивный метод. Вы хотите использовать -ImagePathпереключатель, чтобы сделать это.

Таким образом, команда:

PowerShell Mount-DiskImage -ImagePath \"C:\AbsolutePathTo\Image.iso\"

Помните, что если вы указываете абсолютный путь (для пробелов и других специальных символов), вам нужно экранировать кавычки.

Чтобы демонтировать ISO-образ, не забудьте процитировать его:

PowerShell "Get-Volume G | Get-DiskImage | Dismount-DiskImage"

Обратите внимание, что нам не нужно было заключать команду в кавычки в первом случае, но мы делаем это во втором, потому что |конвейер заставит командную строку думать, что она находится в контексте командной строки, а не как аргументы добавления PowerShell(для которых PowerShell автоматически объединяет в одну команду).

Также убедитесь, что написано Dismount-DiskImageправильно (нет kв Dismount).

ronalchn
источник
Что делает переключатель -Command и почему работает неинтерактивно?
Таннер Фолкнер,
1
упс, не нужно -Команда, похоже, она делает это автоматически, неинтерактивно, потому что скорее всего, скрипт делает это, а не человек (который может просто использовать графический интерфейс)
ronalchn
Не забудьте также о более простой разборке по имени файла:PowerShell Dismount-DiskImage \"C:\AbsolutePathTo\Image.iso\"
juanitogan
Для нынешних PowerShell Mount-DiskImage \"%CD%\Image.iso\"
режиссеров