Powershell: VHDX-Dateien in Azure verwalten
9. Oktober 2019Oftmals möchten die Systembetreuer bestehende virtuelle Maschinen (VMs) im Format VHD (Virtual Hard Disk) beziehungsweise VHDX auch unter Microsofts Cloud-Plattform „Azure“ nutzen. Werden diese Abbilddateien in der grafischen Azure-Verwaltungsoberfläche (via Webbrowser) hochgeladen, und in dieser GUI auch als virtuelle Festplatte für eine frische VMs definiert, kommt es oftmals zu einer Fehlermeldung – angeblich handelt es sich nicht um eine gültige VHD-Datei.
Um derartigen Problemen aus dem Weg zu gehen, sollten die Administratoren die Powershell nutzen, um Images an Azure zu übertragen. Dazu können die Systembetreuer beispielsweise folgendes Skript einsetzen:
Login-AzureRmAccount Get-AzureRmSubscription Select-AzureRmSubscription -SubscriptionId "b6e3.....12c9e" $rgImgName = "RGSCUSPOC" $urlOfUploadedImageVhd = "https://savpoc.blob.core.windows.net/poctemplates/WinPEPS.vhd" Add-AzureRmVhd -ResourceGroupName $rgImgName -Destination $urlOfUploadedImageVhd ` -LocalFilePath "S:\OS Images\PE\1709\WinPEPS.vhd"
Bei diesem Beispiel müssen die Administratoren den Dateipfad-Parameter (-LocalFilePath) sowie die URL der VHD(X)-Datei entsprechend anpassen ($urlOfUploadedImageVhd), über eine entsprechende Azure-Subscription (-SubscriptionId) verfügen, sowie über die passenden Anmeldeinformationen verfügen. Auf diese Weise ist sichergestellt, dass sich die VHD(X)-Datei nach dem Upload an der richtigen Stelle und im korrekten Format befindet.
Image effektiv einbinden
Um nun eins der Images als Vorlage für eine VM einzusetzen, können sich die Systembetreuer ebenfalls auf die Powershell verlassen. Dazu wird der Azure Service Manager genutzt, auf folgende Weise kann ein passendes Image aus einer zuvor hochgeladenen VHD(X)-Datei erzeugen:
$location = "South Central US" $imageName = "WinPEImage" $imageConfig = New-AzureRmImageConfig -Location $location $imageConfig = Set-AzureRmImageOsDisk -Image $imageConfig -OsType Windows -OsState Generalized -BlobUri $urlOfUploadedImageVhd $image = New-AzureRmImage -ImageName $imageName -ResourceGroupName $rgImgName -Image $imageConfig
Allerdings müssen die Administratoren dabei einige Details beachten. Beispielsweise empfiehlt es sich (nach der Konfiguration des Windows-Betriebssystems auf der virtuellen Festplatte) das System per „Sysprep“ wieder in einen Grundzustand zu versetzen. Sprich die Systembetreuer konfigurieren das OS soweit wie gewünscht, installieren Updates, Hotfixes und Programme, und versiegeln das Betriebssystem. Danach wird das System virtuell heruntergefahren, und sicherheitshalber kopiert und archiviert. Dieses Grund-Image wird nun nach Azure wie bereits angesprochen kopiert, und nun als Vorlage für eine „frische“ VM in Azure eingesetzt. Daher sind diese VHD(X)-Images bereit für eine Vervielfältigung.
Images löschen
Auch das Entfernen von vorhandenen VHD(X)-Images lässt sich mit Hilfe der Powershell schnell und elegant erledigen. Dazu können die Systembetreuer beispielsweise auf folgendes Cmdlet setzen:
Remove-AzureRmImage -ImageName $imageName -ResourceGroupName $rgImgName
Auf diese Weise wird die jeweilige VHD(X)-datei mit der entsprechenden Bezeichnung (-ImageName) sowohl aus der korrespondierenden Ressourcengruppe (-ResourceGroupName) sowie vom Azure-Speicherplatz entfernt.
Fazit
Bestimmte Aufgaben sollten die Systembetreuer nicht unbedingt in der grafischen Oberfläche angehen. Besonders bei der Verwaltung von VHD- oder VHDX-Dateien, sowie beim Anlegen von VMs lohnt sich ein Blick auf die passenden Powershell-Cmdlets. Lassen sich doch mit Hilfe der Powershell einige Untiefen umschiffen, und beispielsweise virtuelle Festplatten schnell und bequem als Vorlage für „neue“ VMs nutzen.
Florian Huttenloher / John Savill