Wie kann ich eine ISO über PowerShell / programmgesteuert bereitstellen?

28

Wie kann ich in Windows 8 ISO-Images von PowerShell ohne Programme von Drittanbietern aktivieren und deaktivieren?

Die ursprüngliche Überarbeitung dieser Frage hat mich gefragt, ob es möglich ist, ein ISO über PowerShell in Windows 8 zu mounten.

Tanner Faulkner
quelle

Antworten:

46

Mounten eines ISO von der Eingabeaufforderung aus (nur Windows 8/2012 und höher)

Wenn Sie an einer Eingabeaufforderung sitzen und ein ISO bereitstellen müssen, führen Sie den folgenden Befehl aus:

PowerShell Mount-DiskImage

Dadurch wird ein PowerShell-Cmdlet aufgerufen. Sie werden aufgefordert, den Pfad der ISOs anzugeben, die Sie bereitstellen möchten. Wenn Sie fertig sind, lassen Sie das letzte Feld leer und drücken Sie Enter.

Ausführen des Cmdlets Mount-DiskImage

Tada! Es ist montiert:

Tada!  Es ist montiert - "Geräte mit Wechselmedien"

ISO demontieren

Führen Sie Dismount-DiskImagezum Trennen der Bereitstellung einer ISO von PowerShell die folgenden Schritte aus. Wenn Sie nur den Laufwerksbuchstaben und nicht den Image-Pfad kennen, verwenden Sie diesen Befehl:

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

Mit diesem Befehl wird das angegebene Laufwerk abgerufen, das Festplatten-Image gesucht und die Bereitstellung aufgehoben.

"Geräte mit Wechselmedien" nach dem Entfernen der ISO

Mounten mehrerer ISOs und Anzeigen von Laufwerksbuchstaben

Sie können das -PassThruFlag auch zum Speichern von Daten verwenden, die an den Befehl übergeben werden. Lassen Sie uns ein paar ISOs mounten, ihre Laufwerksbuchstaben anzeigen, eine Datei auf einem der Laufwerke ausführen und dann die Bereitstellung aller ISOs aufheben.

Hängen Sie die ISOs ein

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

Zeigen Sie Volume-Informationen für jede ISO an, die mit einer foreachSchleife montiert wurde

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

Liste J Laufwerk

 ls J:\

Öffne einen Ordner

 start wubi.exe

Ausgabe von foreach / Get-Volume und ls

Verwenden Sie den folgenden Befehl, um die Bereitstellung der ISOs aufzuheben:

 Dismount-DiskImage $MountedISOs.ImagePath

Testen der ISO

Um ein einfaches Skript zu erstellen, das überprüft, ob die ISO angehängt ist und tatsächlich eine ISO ist (im Gegensatz zu einer VHD), verwende ich gerne -PassThru, um das Objekt vorübergehend zu speichern, und Get-DiskImageaktualisiere den Status des DiskImage-Objekts mit dem Befehl. Dadurch wird die AttachedEigenschaft aktualisiert . Die StorageTypeEigenschaft gibt an, ob die Datei entsprechend ihrer Dateierweiterung eine ISO- oder eine VHD-Datei ist.

Verwenden Sie <code> -PassThru </ code> und <code> Get-DiskImage </ code>

Die StorageTypevon einer VHD ist 2, wobei eine ISO 1 zurückgibt. Hier ist die Ausgabe von $UbuntuISO:
Hier ist die Ausgabe von <code> $ UbuntuISO </ code>

Dies ist die Ausgabe $tempnach dem Mounten einer VHD: ( Mount-DiskImagekann auch VHDs mounten!)
die Ausgabe von <code> $ temp </ code> nach dem Mounten einer VHD

Beachten Sie, dass die Attachedobige Eigenschaft Falsetrotz des Mount-DiskImageBefehls ohne Probleme ausgeführt wird.

Beachten Sie, dass die $UbuntuISOVariable auch nicht aktualisiert wird:
Die Variable <code> $ UbuntuISO </ code> bleibt nicht aktualisiert


Technet: Mount-DiskImage

Technet: Dismount-DiskImage

Tanner Faulkner
quelle
6
Verdammt, mit all diesen neuen Cmdlets in PowerShell beginnt Windows 8 zu kitzeln.
sinni800
1
Wir können das Image einfach über den Befehl mounten C:\>explorer.exe imagepath, hier brauchen wir kein PS, aber zum Abmounten brauchen wir das PS.
Avirk
3
Befindet sich alles in Windows 8? Ich meine, müssen Sie nicht andere Programme installieren ???
Searush
2
+1 Sehr schön! Das war genau , was ich hatte gehofft , in Win8 zu finden , damit ich es schließlich bis zum Ende meiner Antwort hinzufügen könnte hier , aber Sie haben mich gerettet die Mühe. Ich muss wirklich anfangen, meine PS-Fähigkeiten zu verbessern. :) Bearbeiten: Gibt es ein Cmdlet, um die Innereien zu testen und zu melden, ob es sich bei der Datei um eine ISO- oder VHD-Datei handelt oder um etwas ganz anderes, das nicht unterstützt wird? Oder vielleicht eine Möglichkeit, den Rückgabewert von Mount-DiskImage zu testen, damit der Code entsprechend verzweigt werden kann?
Karan
1
@ Karan Endlich habe ich es herausgefunden = D Es wird den Mut nicht auf die Probe stellen, und ehrlich gesagt denke ich, das ist übertrieben. Aber es wird uns wissen lassen, ob es gemountet ist und ein ISO vs VHD, ohne in die Fehlerbehandlung von PowerShell einzutauchen.
Tanner Faulkner
3

Wenn Sie dies über die Befehlszeile tun möchten, benötigen Sie normalerweise eine nicht interaktive Methode. Sie möchten den -ImagePathSchalter verwenden, um dies zu tun.

Der Befehl lautet also:

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

Denken Sie daran, dass Sie die Anführungszeichen umgehen müssen, wenn Sie den absoluten Pfad (für Leerzeichen und andere Sonderzeichen) in Anführungszeichen setzen.

Denken Sie daran, ein ISO-Image zu zitieren, um es zu entfernen:

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

Beachten Sie, dass wir den Befehl im ersten Fall nicht in Anführungszeichen setzen mussten, im zweiten Fall jedoch, da die |Pipe die Befehlszeile veranlasst, zu denken, dass er sich im Befehlszeilenkontext befindet, und nicht Argumente zu PowerShell(denen PowerShell automatisch hinzufügt) zu einem einzigen Befehl verketten).

Achten Sie auch auf die Dismount-DiskImagekorrekte Schreibweise (Nein kbei Abmelden).

ronalchn
quelle
Was bewirkt der -Befehlsschalter und warum wird er nicht interaktiv ausgeführt?
Tanner Faulkner
1
oops, brauchte keinen -Befehl, das scheint automatisch zu machen, nicht interaktiv, da es wahrscheinlich ist, dass ein Skript dies eher tut als ein Mensch (der nur die GUI benutzen kann)
ronalchn
Vergessen Sie nicht das einfachere Absteigen auch nach Dateiname:PowerShell Dismount-DiskImage \"C:\AbsolutePathTo\Image.iso\"
Juanitogan
Für aktuelle dir mounts:PowerShell Mount-DiskImage \"%CD%\Image.iso\"
Juanitogan