¿Cómo puedo montar un ISO a través de PowerShell / programáticamente?

Respuestas:

46

Montar un ISO desde el símbolo del sistema (solo Windows 8/2012 y superior)

Si está sentado en un símbolo del sistema y necesita montar un ISO, ejecute el siguiente comando:

PowerShell Mount-DiskImage

Esto invocará un cmdlet de PowerShell. Se le solicitará la ruta de los ISO que desea montar. Cuando haya terminado, deje el último en blanco y presione Enter.

ejecutando el cmdlet Mount-DiskImage

Tada! Está montado:

Tada!  Está montado: "Dispositivos con almacenamiento extraíble"

Desmontar un ISO

Para desmontar un ISO de PowerShell, ejecute Dismount-DiskImagey siga las indicaciones. Si solo conoce la letra de la unidad en la parte superior de su cabeza y no la ruta de la imagen, use este comando:

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

Este comando tomará la unidad que especifique, buscará la imagen del disco y la desmontará.

"Dispositivos con almacenamiento extraíble" después de desmontar ISO

Montaje de múltiples ISO y visualización de letras de unidad

También puede usar la -PassThrubandera para almacenar los datos pasados ​​al comando. Montemos algunas ISO, visualicemos las letras de sus unidades, ejecutemos un archivo en una de las unidades y luego desmontemos todas las ISO.

Montar los ISO

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

Mostrar información de volumen para cada ISO montado usando un foreachbucle

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

List J drive

 ls J:\

Abrir un archivo

 start wubi.exe

salida de foreach / Get-Volume y ls

Para desmontar los ISO, use el siguiente comando:

 Dismount-DiskImage $MountedISOs.ImagePath

Prueba de la ISO

Para crear una secuencia de comandos simple que verifique si el ISO está adjunto y de hecho es un ISO (en comparación con un VHD) que me gusta usar -PassThrupara almacenar el objeto temporalmente, y use el Get-DiskImagecomando para actualizar el estado del objeto DiskImage. Esto actualizará la Attachedpropiedad. La StorageTypepropiedad le dirá si el archivo es un ISO o VHD de acuerdo con su extensión de archivo.

utilizando <code> -PassThru </code> y <code> Get-DiskImage </code>

El StorageTypede un VHD es 2, donde un ISO devolverá 1. Aquí está la salida de $UbuntuISO:
Aquí está la salida de <code> $ UbuntuISO </code>

Esta es la salida de $tempdespués de montar un VHD: (¡ Mount-DiskImagetambién puede montar VHD!)
la salida de <code> $ temp </code> después de montar un VHD

Tenga en cuenta que la Attachedpropiedad anterior es False, a pesar del Mount-DiskImagecomando que se ejecuta sin problemas.

Tenga en cuenta que la $UbuntuISOvariable tampoco se mantendrá actualizada:
la variable <code> $ UbuntuISO </code> no permanece actualizada


Technet: Mount-DiskImage

Technet: Dismount-DiskImage

Tanner Faulkner
fuente
66
Maldición, con todos esos nuevos cmdlets en PowerShell, Windows 8 comienza a hacer cosquillas.
sinni800
1
Podemos montar fácilmente la imagen a través del comando C:\>explorer.exe imagepath, aquí no necesitamos PS, pero para desmontar allí necesitamos la PS.
avirk el
3
¿Está todo dentro de Windows 8? Quiero decir, ¿no necesitas instalar otros programas?
Searush el
2
+1 ¡ Muy bonito! Esto era precisamente lo que esperaba encontrar en Win8 para poder agregarlo al final de mi respuesta aquí , pero me ahorró el problema. Realmente necesito comenzar a mejorar mis habilidades de PS. :) Editar: ¿Hay algún cmdlet para probar las entrañas e informar si el archivo es un ISO o VHD o algo completamente diferente que no es compatible? ¿O tal vez una forma de probar el valor de retorno de Mount-DiskImage para que el código se pueda bifurcar en consecuencia?
Karan
1
@Karan Finalmente llegó a darse cuenta de eso = D No va a poner a prueba las agallas, y francamente creo que es exagerado. Pero nos hará saber si está montado y un ISO vs VHD sin sumergirse en el manejo de errores de PowerShell.
Tanner Faulkner
3

Normalmente, si desea hacer esto a través de la línea de comando, necesita un método no interactivo. Deberá usar el -ImagePathinterruptor para hacer esto.

Por lo tanto, el comando es:

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

Recuerde que si cita la ruta absoluta (para contener espacios y otros caracteres especiales), debe escapar de las comillas.

Para desmontar una imagen iso, recuerde citarla:

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

Tenga en cuenta que no tuvimos que citar el comando en el primer caso, pero sí en el segundo, porque la |tubería hará que la línea de comando piense que está en el contexto de la línea de comando, en lugar de agregar argumentos a PowerShell(que PowerShell automáticamente se concatena en un solo comando).

También asegúrese de deletrear Dismount-DiskImagecorrectamente (no ken Desmontar).

ronalchn
fuente
¿Qué hace el modificador -Command y por qué ejecuta no interactivo?
Tanner Faulkner el
1
oops, no necesitaba -Command, parece que lo hace de forma automática, no interactiva porque lo más probable es que un script lo esté haciendo en lugar de un humano (que solo puede usar la GUI)
ronalchn
No olvide el desmontaje más simple por nombre de archivo también:PowerShell Dismount-DiskImage \"C:\AbsolutePathTo\Image.iso\"
juanitogan
Para montajes de dir actuales:PowerShell Mount-DiskImage \"%CD%\Image.iso\"
juanitogan