Azure: Virtuelle Maschinen per PowerShell verwalten

Mit Hilfe der PowerShell können Administratoren viele tägliche Aufgaben bei der Verwaltung und Überwachung von virtuellen VMs in Azure automatisieren und beschleunigen.

Werden mehrere Workloads in die Azure-Cloud verlagert, können Administratoren die Kontrolle über diese virtuellen Maschinen behalten, ohne dass hierfür immer das Azure-Admin-Portal bemühen müssten. So lassen sich alltägliche Admin-Aufgaben mit Hilfe von Azure PowerShell-Cmdlets deutlich erleichtern. Das können sowohl simultane Änderungen an mehreren virtuellen Maschinen als auch die Erstellung von Berichten sein. All dies lässt sich erledigen, ohne die Admin-Oberfläche nutzen zu müssen. Mit der PowerShell kann man die Erledigung der Aufgaben nicht nur beschleunigen, sondern auch wiederkehrende Aufgaben automatisieren.

So kann man beispielsweise ein PowerShell-Skript anlegen, dass täglich den Status aller Azure-VMs erfasst. Damit lässt sich sicherstellen, dass tatsächlich nur die erforderlichen VM die Berechtigung zum Ausführen haben. Dies kann insbesondere im Hinblick auf die Kostenkontrolle hilfreich sein. Die nachfolgenden Beispiele sollen eine Art Ausgangsbasis bieten, auf deren Grundlage entsprechende Skripte für die eigenen Anforderungen entwickelt werden können.

Azure PowerShell installieren und einsetzen

Damit Azure-VMs in der PowerShell verwaltet werden können, muss das Azure-Resource-Manager-PowerShell-Modul auf dem System installiert werden. Das kann beispielswiese über die PowerShell Gallery erfolgen. Die Verwendung der PowerShell Gallery erfordert wiederum das PowerShellGet-Modul, das seinerseits Bestandteil von Windows 10 und Windows Server 2016 ist.

Um das Azure-PowerShell-Modul mit der PowerShell Gallery zu installieren, müssen folgende Befehle ausgeführt werden: 

Install-Module AzureRM

Install-AzureRM

Install-Module Azure

Import-AzureRM

Import-Module Azure 

Mit dem Cmdlet Login-AzureRMAccount kann man sich bei seinem Azure-Konto anmelden, dabei werden die Anmeldeinformationen abgefragt. Den Anmeldestatus zeigt das Cmdlet Get-AzureRMSubscription, das die Details des angemeldeten Azure-Abonnements ausgibt.

Cloud-VMs mit Azure-PowerShell-Cmdlets verwalten

Mit Hilfe der Azure-PowerShell-Cmdlets können Administratoren unterschiedliche Aufgaben erledigen, wie etwa VMs verschieben, die Größe der VM ändern oder die Einstellungen innerhalb einer VM korrigieren.

Eine Übersicht der PowerShell-Cmdlets, die sich speziell mit VMs beschäftigen listet folgender Befehl:

Get-Command -Module AzureRM *-AzureRMVM*

Alle Azure-VMs eines Abonnements finden

Um alle virtuellen Maschinen innerhalb eines Abonnements aufzulisten, kommt das Cmdlet Get-AzureRMVM zum Einsatz. Wie der Name bereits andeutet, zeigt das Cmdlet alle laufenden und nicht laufenden VMs von Azure im aktuellen PowerShell-Fenster an.

Der folgende Befehl exportiert das Ergebnis in eine CSV-Datei:

Get-AzureRMVM | Export-CSV C:\Temp\AllAzureVMInfo.CSV -NoType

Informationen zu Azure-VMs abrufen

Um Details zu einer ganz bestimmen VM in einer Ressourcengruppe zu erhalten, kann der folgende Befehl mit dem entsprechenden Namen der Ressourcengruppe verwendet werden:

Get-AzureRMVM -ResourceGroupName "AzureResourceGroup" -Name "VM1"

Sollen Informationen zu allen virtuellen Azure-VMs einer Ressourcengruppe abgefragt werden, so klappt dies mit diesem Befehl:

Get-AzureRMVM -ResourceGroupName "AzureResourceGroup"

Um auch diese Ergebnisse in eine CSV-Datei zu exportieren, genügt es, einfach wieder das entsprechende Export-CSV-Cmdlet anzufügen:

Get-AzureRMVM -ResourceGroupName "AzureResourceGroup" | Export-CSV C:\Temp\AzureVMInfo.CSV -NoType 

Azure-VMs anhalten und starten

Mit Hilfe der Cmdlets Start-AzureRMVM und Stop-AzureRMVM kann man virtuelle Maschinen starten und anhalten. Um das Ganze auf mehrere VMs anzuwenden, kann man mit einer PowerShell-ForEach-Schleife die in einer Textdatei angegebenen VMs abarbeiten.

In nachfolgendem Beispiel verwendet PowerShell eine Textdatei mit der Liste der zu verarbeitenden VMs. In diesem und anderen Beispielen verwenden wir eine Ressourcengruppe namens AzureRSGroup. Ändern Sie dies entsprechend in die Ressourcengruppe, die von Ihnen verwendet wird.

$VMFile = "C:\Temp\AzureVMs.txt"

$AzureResourceGroup = "AzureRSGroup"

Dieser Abschnitt des PowerShell-Skripts hält mehrere Azure-VMs an, die in der Texdatei aufgelistet sind:

Foreach ($ThisVM in Get-Content "$VMFile")

{

Stop-AzureRMVM -ResourceGroupName $AzureResourceGroup -Name "$ThisVM"

}

Um die in der Textdatei aufgeführten VMs zu starten, genügt folgende Anweisung:

Foreach ($ThisVM in Get-Content "$VMFile")

{

 

Start-AzureRMVM -ResourceGroupName $AzureResourceGroup -Name "$ThisVM"

 

}

Den Status von Azure-VMs abfragen

Es gibt immer wieder Situationen, in denen es erforderlich ist, den aktuellen Status einer Azure-VM zu ermitteln, um zu prüfen, ob sie läuft oder nicht. Das folgende PowerShell-Skript schreibt den Bereitstellungsstatus von Azure-VMs in eine Textdatei:

$VMFile = "C:\Temp\AllVMs.txt"

$ReportFile = "C:\Temp\VMStatus.CSV"

$STR = "VM Name, Status"

Add-Content $ReportFile $STR

$AzureResourceGroup = "AzureRSGroup"

Foreach ($ThisVM in Get-Content "$VMFile")

{

$FinalStatus=""

$VMStatusCode = $(Get-AzureRmVM -ResourceGroupName $AzureResourceGroup -VMName $ThisVM -Status).Statuses

foreach($EachStatusNow in $VMStatusCode)

{

if($EachStatusNow.Code -ne "ProvisioningState/succeeded")

{

$FinalStatus = "status is `"$($EachStatusNow.displaystatus)`""

}

}

$STR = $ThisVM+","+$FinalStatus

Add-Content $ReportFile $STR

}

Das Skript generiert einen Bericht in der Datei VMStatus.csv in C:\Temp\ mit dem Namen der Azure-VM und ihrem Status.

Die Betriebszeit einer Azure-VM ermitteln

Azure PowerShell bietet kein Cmdlet, um die Betriebszeit einer Azure-VM auszulesen. Mit Hilfe der Win32_ClassOperatingSystem-WMI-Klasse lässt sich dies aber in folgendem PowerShell-Skript ermitteln:

$VMFile = "C:\Temp\AllVMIPs.txt"

$ReportFile = "C:\Temp\AzureVMUpTime.CSV"

$STR = "VM IP, Up Time"

Add-Content $ReportFile $STR

Foreach ($ThisVM in Get-Content "$VMFile")

{

$NewCIMSession = New-CimSession -ComputerName $ThisVM

$VMOS = Get-CimInstance -CimSession $NewCIMSession -ClassName Win32_OperatingSystem

$uptime = (Get-Date) - $VMOS.LastBootUpTime

$STR = $ThisVM+","+$uptime

Add-Content $ReportFile $STR

}

Das PowerShell-Skript ermittelt die Azure-VM-Betriebszeit für öffentliche Endpunkte. Die Textdatei enthält die Liste der öffentlichen IP-Adressen für die Azure-VMs. Das Skript liegt die Ergebnisse der Betriebszeit in einer CSV-Datei ab.

Eine Azure-VM-Konfiguration vorbereiten

Es kann durchaus sinnvoll sein, zu überprüfen, ob die tatsächliche VM-Konfiguration der produktiven VMs den erforderlichen Einstellungen entsprechen. So lässt sich etwa Hardwareprofil, Standort, Größe, Betriebssystem, virtuelle Netzwerkkarte, Boot-Diagnose-Status und Bereitstellungsstatus auslesen.

Das folgende PowerShell-Skript fragt die in einer Textdatei aufgelisteten VMs ab und erstellt einen CSV-Bericht mit den Eigenschaften jeder VM:

$VMFile = "C:\Temp\AllVMs.txt"

$ReportFile = "C:\Temp\AzureVMConfigReport.CSV"

$STR = "VM Name, Resource Group Name, Hardware Profile, VM Location, Boot Diagnostics Status, OS Type, vNIC, Provisioning State"

Add-Content $ReportFile $STR

$AzureResourceGroup = "AzureRSGroup"

Foreach ($ThisVM in Get-Content "$VMFile")

{

$VMProp = Get-AzureRMVM -Name $ThisVM -ResourceGroupName $AzureResourceGroup

$VMLocation = $VMProp.Location

$BootDStatus = $VMProp.DiagonosticsProfile.BootDiagnostics.Enabled

$VMProvState = $VMProp.ProvisioningState

$VMHWProfile = $VMProp.HardwareProfile.VMSize

$VMOSType = $VMProp.OSType

$VMvNIC = $VMProp.NIC

$STR = $ThisVM+","+$AzureResourceGroup+","+$VMHWProfile+",

"+$VMLocation+","+$BootDStatus+","+$VMOSType+","+$VMvNIC+",

"+$VMProvState

Add-Content $ReportFile $STR

}

Folgen Sie SearchDataCenter.de auch auf Twitter, Google+, Xing und Facebook!

Nächste Schritte

Azure-VMs per PowerShell herunterladen

Azure Functions per PowerShell nutzen

Grundlagen zu PowerShell-Skripten

Erfahren Sie mehr über Data-Center-Betrieb