Como montar um ISO via PowerShell / programaticamente?

Respostas:

46

Montar uma ISO a partir do prompt de comando (apenas Windows 8/2012 e superior)

Se você estiver sentado em um prompt de comando e precisar montar uma ISO, execute o seguinte comando:

PowerShell Mount-DiskImage

Isso invocará um cmdlet do PowerShell. Você será solicitado a encontrar o caminho dos ISOs que deseja montar. Quando terminar, deixe o último em branco e empurre Enter.

executando o cmdlet Mount-DiskImage

Tada! Está montado:

Tada!  Está montado - "Dispositivos com armazenamento removível"

Desmonte um ISO

Para desmontar um ISO do PowerShell, execute Dismount-DiskImagee siga o prompt. Se você conhece apenas a letra da unidade na parte superior da cabeça e não o caminho da imagem, use este comando:

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

Este comando irá pegar a unidade especificada, localizar a imagem do disco e desmontá-la.

“Dispositivos com armazenamento removível” após desmontar o ISO

Montagem de vários ISOs e exibição de letras de unidade

Você também pode usar o -PassThrusinalizador para armazenar dados passados ​​para o comando. Vamos montar algumas ISOs, exibir suas letras de unidade, executar um arquivo em uma das unidades e depois desmontar todas as ISOs.

Monte os ISOs

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

Exibir informações de volume para cada ISO montado usando um foreachloop

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

Unidade da lista J

 ls J:\

Abra um arquivo

 start wubi.exe

saída de foreach / Get-Volume e ls

Para desmontar os ISOs, use o seguinte comando:

 Dismount-DiskImage $MountedISOs.ImagePath

Testando o ISO

Para criar um script simples que verifique se o ISO está anexado e é de fato um ISO (vs. um VHD) que eu gosto de usar -PassThrupara armazenar temporariamente o objeto e use o Get-DiskImagecomando para atualizar o status do objeto DiskImage. Isso atualizará a Attachedpropriedade. A StorageTypepropriedade informará se o arquivo é um ISO ou VHD de acordo com sua extensão.

usando <code> -PassThru </code> e <code> Get-DiskImage </code>

O StorageTypede um VHD é 2, onde um ISO retornará 1. Aqui está a saída de $UbuntuISO:
Aqui está a saída do <code> $ UbuntuISO </code>

Esta é a saída de $tempdepois de montar um VHD: ( Mount-DiskImagetambém pode montar VHDs!)
a saída de <code> $ temp </code> após a montagem de um VHD

Observe que a Attachedpropriedade acima é False, apesar do Mount-DiskImagecomando ser executado sem problemas.

Lembre-se de que a $UbuntuISOvariável também não será atualizada:
a variável <code> $ UbuntuISO </code> não permanece atualizada


Technet: Mount-DiskImage

Technet: Dismount-DiskImage

Tanner Faulkner
fonte
6
Porra, com todos esses novos cmdlets no PowerShell Windows 8 começa a fazer cócegas.
precisa
11
Podemos facilmente montar a imagem através do comando C:\>explorer.exe imagepath, aqui não precisamos do PS, mas para desmontar, precisamos do PS.
Avirk
3
Está tudo dentro do Windows 8? Quero dizer, você não precisa instalar outros programas ???
Searush
2
+1 Muito bom mesmo! Era exatamente isso que eu esperava encontrar no Win8 para poder adicioná-lo ao final da minha resposta aqui , mas você me salvou do problema. Eu realmente preciso começar a melhorar minhas habilidades em PS. :) Editar: existe algum cmdlet para testar as entranhas e relatar se o arquivo é um ISO ou VHD ou qualquer outra coisa totalmente incompatível? Ou talvez uma maneira de testar o valor de retorno do Mount-DiskImage, talvez para que o código possa ser ramificado de acordo?
Karan
11
@ Karan Finalmente, resolvi entender isso = D Não vai testar a coragem, e sinceramente acho que é um exagero. Mas ele nos informará se ele está montado e um ISO vs VHD sem entrar no tratamento de erros do PowerShell.
Tanner Faulkner
3

Normalmente, se você quiser fazer isso pela linha de comando, precisará de um método não interativo. Você desejará usar a -ImagePathopção para fazer isso.

Assim, o comando é:

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

Lembre-se de que, se você citar o caminho absoluto (para conter espaços e outros caracteres especiais), precisará escapar das aspas.

Para desmontar uma imagem iso, lembre-se de citá-la:

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

Observe que não tivemos que citar o comando no primeiro caso, mas o fazemos no segundo, porque o |canal fará com que a linha de comando pense que está no contexto da linha de comando, em vez de adicionar argumentos aos PowerShellquais o PowerShell automaticamente concatena em um único comando).

Também não se esqueça de escrever Dismount-DiskImagecorretamente (não kem Desmontar).

ronalchn
fonte
O que a opção -Command faz e por que não é interativo?
Tanner Faulkner #
11
oops, não precisava -Command, parece fazer isso automaticamente, não-interativo, porque as chances são, um script é fazê-lo em vez de um ser humano (que pode apenas usar o GUI)
ronalchn
Não se esqueça da desmontagem mais simples por nome de arquivo:PowerShell Dismount-DiskImage \"C:\AbsolutePathTo\Image.iso\"
juanitogan
Para montagens dir PowerShell Mount-DiskImage \"%CD%\Image.iso\"
diretas