Als das ist wirklich cool, wer viel mit Azure und der Cloud arbeitet, hat sich ja bestimmt schon eigene PowerShell Skripte oder Module gebaut. Mit der neuen Azure Cloud Shell kann man jetzt sein Skript Repository direkt in der Cloud ausführen.
Update 30.07.2018: Kapitel „Update Linux Cloud Shell“ hinzugefügt
Update 23.10.2018: Diverse Fehler in den Skripten korrigiert (Ordner, Variablen eingefügt, Enable-AzureRMAlias). Informationen entfernt, die es mit dem aktuellen Release nicht mehr gibt bzw. nicht mehr funktionieren.
Für mich ganz besonders spannend, denn ich habe ein Modul zur Verwaltung verschiedenster Testumgebungen und SharePoint PaaS Umgebungen, die weitesgehend auf Azure VMs, Storage und co basieren. Solche Aufgaben laufen von mehreren Minuten bis hin zu Stunden, und wehe wenn ich mal an einem anderen Rechner sitze. Cloud Shell löst das, einfach im Azure Portal anmelden, PowerShell starten und alles wie gewohnt starten.
Installation Azure Cloud Shell
Die Installation erfolgt leicht und ist kostenlos. Es werden lediglich folgende Ressourcen angelegt:
- Resource Group (am Besten eine Eigene)
- Storage Account
Los geht’s mit dem Klick auf die Shell:

Aus Gewohnheit und Prinzip drücken wir Admins immer auf „Erweitert“, damit kann ich auch sicherstellen, dass ich in der Region meiner Wahl bin:

Bitte bei der Eingabe von Storage Account und File Share darauf achten, dass nur Kleinbuchstaben ohne Leerzeichen verwendet werden – sonst kommt es zum Fehler.
Installation AzureRM PowerShell Module
Wer dies vorher per MSI installiert hat, darf jetzt direkt per PowerShell installieren, denn MSI gibt es hier nicht, auch wenn dahinter eine VM steckt:
Update 23.10.2018: Nicht mehr notwendig, bzw. funktioniert auch gar nicht mehr. Die Azure PowerShell ist vorinstalliert und heißt jetzt „Az“, z.B. Get-AzVM für Get-AzureRMVM.
Install-Module AzureRM -AllowClobber
Installation eigener Module
Wie gesagt habe ich ein eigenes PowerShell Modul, das ich bereitstellen möchte. Grundsätzlich geht das auch mit jedem anderen Skript, denn die Azure Cloud Shell stellt ein SMB Share bereit, auf das ich meine Daten ablegen kann. Das geht auch direkt über Azure – Storage Accounts – <CLI Account > – Files – .pscloudshell\WindowsPowerShell\Module (also fast wie bei Windows lokal) und über Upload hochladen:

Update Linux Cloud Shell
Update 30.07.2018: Ich wollte wieder mein Cloud Shell Modul verwenden und musste feststellen, es geht irgendwie nicht. Es stellte sich heraus, dass die Windows Variante eingestellt wurde, und nur noch die Linux Version unterstützt wird (seit Mai 2018).
Um das bisherige PowerShell Modul nutzen zu können, muss man eigentlich nur die Umgebungsvariable anpassen. Denn der Azure Storage wird als als $Home/clouddrive gemounted und alles was darin liegt, wird als IMG gespeichert.
Das geht wie folgt:
#Ausgabe PS /home/dennis> $env:PSModulePath /home/dennis/.local/share/powershell/Modules:/usr/local/share/powershell/Modules:/opt/microsoft/powershell/6-preview/Modules #Anpassung #Entscheident ist dieser Pfad (passend zum vorherigen Artikel, der Nutzername variiert) ":/home/dennis/clouddrive/.pscloudshell/WindowsPowerShell/Modules" PS /home/dennis> $env:PSModulePath = $env:PSModulePath + ":/home/dennis/clouddrive/.pscloudshell/WindowsPowerShell/Modules" #Ausgabe PS /home/dennis> $env:PSModulePath /home/dennis/.local/share/powershell/Modules:/usr/local/share/powershell/Modules:/opt/microsoft/powershell/6-preview/Modules:/home/dennis/clouddrive/.pscloudshell/WindowsPowerShell/Modules
Das sieht dann so aus:

Anschließend funktioniert der Import wieder, einmalig bis zum nächsten Neustart der Konsole.
Damit das dauerhaft funktioniert, muss man noch ein paar mehr Schritte unternehmen und zwar über ein Profil. Dazu muss man im Home Verzeichnis in den Ordern .config wechseln, ein Verzeichnis „PowerShell“ erstellen und mit „vi“ ein Profil „Microsoft.PowerShell_profile.ps1“ erzeugen (Der Pfad sollte mit $Profile übereinstimmen, diese Datei lädt er automatisch beim Start der PowerShell. Diese muss nicht existieren, daher legen wir diese nun an):
cd $Home/.config mkdir PowerShell vi Microsoft.PowerShell_profile.ps1
In dem Editor vi muss man „i“ eingeben, um in den Editormodus zu wechseln. Anschließend folgendes Abtippen:
Write-Host 'Add PowerShell Modules file path' $env:PSModulePath = $env:PSModulePath + ":/home/dennis/clouddrive/.pscloudshell/WindowsPowerShell/Modules" Write-Host 'Variable ' $env:PSModulePath
Danach einmal „Esc“ drücken um den Editor zu verlassen und mit „:wq“ (write quit) den Editor verlassen:

Anschließend wird auch beim Neustart der Konsole die Variable entsprechend hinzugefügt.
Anschließend steht das Modul zur Verfügung:

Weitere Probleme bei Cloud Shell auf Linux
Ein Problem ergibt sich speziell bei PowerShell Modulen, da zumindest bei der Azure PowerShell die Module anders bezeichnet sind, Versionen ebenfalls:
- Windows = „AzureRM.Profile“; Version 5.3.3
- Linux = Zwischenzeitlich „AzureRM.Profile.Netcore“; Version 0.13.1
Linux aktuell = „Az.Profile“; Version 0.3.0 (Alle cmdlet’s heißen auch anders, damit die Alten wieder funktionieren, muss man „Enable-AzureRMAlias“ ausführen.
Update 23.10.2018: Führen Sie einmalig „Enable-AzureRMAlias“ aus, damit auch die Skripte die identischen AzureRM* cmdlets nutzen können.
Das bedeutet ich muss eine eigene Version für Windows und Linux pflegen oder zumindest im Build Prozess berücksichtigen.
Weitere Probleme, Windows Programme lassen sich damit nicht mehr ausführen. Ich nutze z.B. AzCopy (um große Datenmengen von Storage Account A nach Storage Account B zu kopieren). Bei der Ausführung kommt natürlich ein Fehler:
Program ‚AzCopy.exe‘ failed to run: Exec format errorAt line:1 char:1
Da kenne ich zurzeit keine Alternative, denn mit dem Profile AzureRM.Storage.Netcore geht das leider nicht.
Außerdem sollte im Modul peinlichst genau auf Groß- und Kleinschreibung geachtet werden… Linux nimmt das persönlich, Windows ist es egal.
Aus meiner Sicht leidet dadurch die Portierbarkeit von Skripten. Für einfache Tätigkeiten aber vermutlich irrelevant.
Referenz
- Azure Cloud Shell https://docs.microsoft.com/de-de/azure/cloud-shell/overview?view=azurermps-5.1.1
- PowerShell in Azure Cloud Shell for Windows users https://docs.microsoft.com/de-at/azure/cloud-shell/cloud-shell-windows-users