Cloud Shell

Heute brauchen Sie nicht mal einen eigenen Computer sondern nur noch einen Browser und eine Azure-Subscription, um eine in Azure bereitgestellte Shell (BASH oder PowerShell) zur Verwaltung zu starten. Hier geht es um die Azure Cloud Shell.

Starten

Mit den entsprechenden Berechtigungen können sie auf https://portal.azure.com gehen und direkt in der Kopfzeile finden Sie das kleine "Shell"-Symbol. Sie können auch direkt über die URL https://portal.azure.com/#cloudshell/ die Shell starten.

Die Cloud Shell benötigt eine Azure Subscription, um die erforderliche Rechenleistung und Speicherplatz abzurechnen.

In meinem Fall warnt die Shell nun, dass sie "ephemeral" (kurzfristig, flüchtig), d.h. alle Änderungen wie Laden von Modulen, Speichern von Dateien etc. sind nicht beständig und gehen mit dem Schließen verloren. Durch Commandlets ausgeführte Aktionen, z.B.: die Bearbeitung von Objekten in Exchange oder Entra ID sind natürlich davon nicht betroffen

Ich brauche also eine Azure Subscription, bei der auch Zahlungsinformationen hinterlegt sind. Aber normalerweiser entstehen keine Kosten (Stand Jan 2025). Erst wenn ich Dateien und Skripte dauerhaft speichern möchte, muss ich einen "Azure File Share" kaufen und mit der Shell verbinden. Soll meine Shell in einem virtuellen Netzwerk laufen, damit ich im privaten Netzwerk unterwegs bin, dann fallen für das Netzwerk weitere Kosten an.

PSCore auf Linux

Zuerst habe ich mir mal angeschaut, was ich da so habe. Es ist eine PowerShell Core in der aktuellen Version, die aber auf einen Azure Linux läuft.

Das bedeutet im Umkehrfall, dass natürlich alle AddOns und Module mit einem Bezug zu Windows-DLLs (z.B. EWS) oder COM-APIs nicht funktionieren werden. Leider fehlen auch Commandlets, um z.B. die Netzwerkkonfiguration auszulesen. Da der Unterbau aber ein Linux ist, müssen wir eben andere Befehle nutzen:

Hier eine Auswahl

ifconfig             Vergleichbar mit IPConfig zur Anzeige der Netzwerkkarten
tracepath            Traceroute, allerdings scheint die Shell ICMP zu blocken
nslookup und dig     DNS-Anfragen
host                 ReverseDNS-Abfragen
cp                   Klassischer Copy
Hostname             liefert den lokalen Namen. Bei mir war das "SANDBOX-63873827073888416"
sysctl -a            Zeigt alle System-Einstellungen (Linux) an
top                  Linux-like Taskmanager

Hier mal meine Ausgabe von TOP 

 

Standardmodule

Mit dem Start sind einige Module vorinstalliert: (Stand Jan 2025)

PS /home/frank_carius> Get-Module                                                

ModuleType Version    Name                                ExportedCommands
---------- -------    ----                                ---------------
Script     4.0.1      Az.Accounts                         {Add-AzEnvironment, Clear-AzConfig, Clear-AzContext, Clear-AzDefault…}
Script     9.0.1      Az.Compute                          {Add-AzImageDataDisk, Add-AzVhd, Add-AzVMAdditionalUnattendContent, Add-AzVMDataDisk…}
Script     7.12.0     Az.Network                          {Add-AzApplicationGatewayAuthenticationCertificate, Add-AzApplicationGatewayBackendAddressPool, Add-…
Script     7.8.0      Az.Resources                        {Export-AzResourceGroup, Export-AzTemplateSpec, Get-AzDenyAssignment, Get-AzDeployment…}
Script     8.1.0      Az.Storage                          {Add-AzRmStorageContainerLegalHold, Add-AzStorageAccountManagementPolicyAction, Add-AzStorageAccount…
Script     1.1.3      Az.Tools.Predictor                  {Disable-AzPredictor, Enable-AzPredictor, Open-AzPredictorSurvey, Send-AzPredictorRating}
Script     0.0.0.10   AzureAD.Standard.Preview            {Add-AzureADApplicationOwner, Add-AzureADDeviceRegisteredOwner, Add-AzureADDeviceRegisteredUser, Add…
Script     0.9.3      AzurePSDrive                       
Manifest   7.0.0.0    Microsoft.PowerShell.Management     {Add-Content, Clear-Content, Clear-Item, Clear-ItemProperty…}
Manifest   7.0.0.0    Microsoft.PowerShell.Utility        {Add-Member, Add-Type, Clear-Variable, Compare-Object…}
Script     1.4.8.1    PackageManagement                   {Find-Package, Find-PackageProvider, Get-Package, Get-PackageProvider…}
Script     0.9.3      PSCloudShellUtility                 {Disable-AzVMPSRemoting, Dismount-CloudDrive, Enable-AzVMPSRemoting, Export-File…}
Script     2.3.6      PSReadLine                          {Get-PSReadLineKeyHandler, Get-PSReadLineOption, Remove-PSReadLineKeyHandler, Set-PSReadLineKeyHandl…
Binary     0.8.1      SHiPS                              

Sie sehen hier erst einmal keine Exchange oder Teams-Shells. Aber Über den Befehl "Get-Packages"  sehen sie zusätzlich, welche weitere Pakete schon vorinstalliert sind. (Stand Jan 2025)

PS /home/frank_carius> get-package

Name                           Version          Source                           ProviderName
----                           -------          ------                           ------------
Az                             13.1.0           /usr/cloudshell/temp             PowerShellGet
Az.Accounts                    4.0.1            /usr/cloudshell/temp             PowerShellGet
Az.Advisor                     2.1.0            /usr/cloudshell/temp             PowerShellGet
Az.Aks                         6.1.0            /usr/cloudshell/temp             PowerShellGet
Az.AnalysisServices            1.2.0            /usr/cloudshell/temp             PowerShellGet
Az.ApiManagement               4.1.0            /usr/cloudshell/temp             PowerShellGet
Az.App                         2.0.1            /usr/cloudshell/temp             PowerShellGet
Az.AppConfiguration            1.4.0            /usr/cloudshell/temp             PowerShellGet
Az.ApplicationInsights         2.3.0            /usr/cloudshell/temp             PowerShellGet
Az.ArcResourceBridge           1.1.0            /usr/cloudshell/temp             PowerShellGet
Az.Attestation                 2.1.0            /usr/cloudshell/temp             PowerShellGet
Az.Automanage                  1.1.0            /usr/cloudshell/temp             PowerShellGet
Az.Automation                  1.11.0           /usr/cloudshell/temp             PowerShellGet
Az.Batch                       3.7.0            /usr/cloudshell/temp             PowerShellGet
Az.Billing                     2.2.0            /usr/cloudshell/temp             PowerShellGet
Az.Cdn                         3.3.0            /usr/cloudshell/temp             PowerShellGet
Az.CloudService                2.1.0            /usr/cloudshell/temp             PowerShellGet
Az.CognitiveServices           1.15.0           /usr/cloudshell/temp             PowerShellGet
Az.Compute                     9.0.1            /usr/cloudshell/temp             PowerShellGet
Az.ConfidentialLedger          1.1.0            /usr/cloudshell/temp             PowerShellGet
Az.ConnectedMachine            1.1.1            /usr/cloudshell/temp             PowerShellGet
Az.ContainerInstance           4.1.1            /usr/cloudshell/temp             PowerShellGet
Az.ContainerRegistry           4.3.0            /usr/cloudshell/temp             PowerShellGet
Az.CosmosDB                    1.16.0           /usr/cloudshell/temp             PowerShellGet
Az.DataBoxEdge                 1.2.0            /usr/cloudshell/temp             PowerShellGet
Az.DataFactory                 1.19.0           /usr/cloudshell/temp             PowerShellGet
Az.DataLakeAnalytics           1.1.0            /usr/cloudshell/temp             PowerShellGet
Az.DataLakeStore               1.4.0            /usr/cloudshell/temp             PowerShellGet
Az.DataProtection              2.6.0            /usr/cloudshell/temp             PowerShellGet
Az.DataShare                   1.1.0            /usr/cloudshell/temp             PowerShellGet
Az.Databricks                  1.10.0           /usr/cloudshell/temp             PowerShellGet
Az.DesktopVirtualization       5.4.1            /usr/cloudshell/temp             PowerShellGet
Az.DevCenter                   2.0.1            /usr/cloudshell/temp             PowerShellGet
Az.DevTestLabs                 1.1.0            /usr/cloudshell/temp             PowerShellGet
Az.Dns                         1.3.1            /usr/cloudshell/temp             PowerShellGet
Az.DnsResolver                 1.1.1            /usr/cloudshell/temp             PowerShellGet
Az.ElasticSan                  1.2.1            /usr/cloudshell/temp             PowerShellGet
Az.EventGrid                   2.2.0            /usr/cloudshell/temp             PowerShellGet
Az.EventHub                    5.1.0            /usr/cloudshell/temp             PowerShellGet
Az.FrontDoor                   1.12.0           /usr/cloudshell/temp             PowerShellGet
Az.Functions                   4.2.0            /usr/cloudshell/temp             PowerShellGet
Az.HDInsight                   6.3.1            /usr/cloudshell/temp             PowerShellGet
Az.HealthDataAIServices        1.0.0            /usr/cloudshell/temp             PowerShellGet
Az.HealthcareApis              2.1.0            /usr/cloudshell/temp             PowerShellGet
Az.IotHub                      2.8.0            /usr/cloudshell/temp             PowerShellGet
Az.KeyVault                    6.3.1            /usr/cloudshell/temp             PowerShellGet
Az.Kusto                       2.4.0            /usr/cloudshell/temp             PowerShellGet
Az.LoadTesting                 1.1.0            /usr/cloudshell/temp             PowerShellGet
Az.LogicApp                    1.6.0            /usr/cloudshell/temp             PowerShellGet
Az.MachineLearning             1.2.0            /usr/cloudshell/temp             PowerShellGet
Az.MachineLearningServices     1.2.0            /usr/cloudshell/temp             PowerShellGet
Az.Maintenance                 1.5.0            /usr/cloudshell/temp             PowerShellGet
Az.ManagedServiceIdentity      1.3.0            /usr/cloudshell/temp             PowerShellGet
Az.ManagedServices             3.1.0            /usr/cloudshell/temp             PowerShellGet
Az.MarketplaceOrdering         2.1.0            /usr/cloudshell/temp             PowerShellGet
Az.Media                       1.2.0            /usr/cloudshell/temp             PowerShellGet
Az.Migrate                     2.6.0            /usr/cloudshell/temp             PowerShellGet
Az.Monitor                     6.0.1            /usr/cloudshell/temp             PowerShellGet
Az.MySql                       1.3.0            /usr/cloudshell/temp             PowerShellGet
Az.Network                     7.12.0           /usr/cloudshell/temp             PowerShellGet
Az.NetworkCloud                1.1.0            /usr/cloudshell/temp             PowerShellGet
Az.Nginx                       1.2.0            /usr/cloudshell/temp             PowerShellGet
Az.NotificationHubs            1.2.0            /usr/cloudshell/temp             PowerShellGet
Az.OperationalInsights         3.3.0            /usr/cloudshell/temp             PowerShellGet
Az.Oracle                      1.1.0            /usr/cloudshell/temp             PowerShellGet
Az.PolicyInsights              1.7.0            /usr/cloudshell/temp             PowerShellGet
Az.PostgreSql                  1.2.0            /usr/cloudshell/temp             PowerShellGet
Az.PowerBIEmbedded             2.1.0            /usr/cloudshell/temp             PowerShellGet
Az.PrivateDns                  1.2.0            /usr/cloudshell/temp             PowerShellGet
Az.RecoveryServices            7.4.0            /usr/cloudshell/temp             PowerShellGet
Az.RedisCache                  1.11.0           /usr/cloudshell/temp             PowerShellGet
Az.RedisEnterpriseCache        1.2.1            /usr/cloudshell/temp             PowerShellGet
Az.Relay                       2.1.0            /usr/cloudshell/temp             PowerShellGet
Az.ResourceGraph               1.1.0            /usr/cloudshell/temp             PowerShellGet
Az.ResourceMover               1.3.0            /usr/cloudshell/temp             PowerShellGet
Az.Resources                   7.8.0            /usr/cloudshell/temp             PowerShellGet
Az.Security                    1.8.0            /usr/cloudshell/temp             PowerShellGet
Az.SecurityInsights            3.2.0            /usr/cloudshell/temp             PowerShellGet
Az.ServiceBus                  4.1.0            /usr/cloudshell/temp             PowerShellGet
Az.ServiceFabric               3.5.0            /usr/cloudshell/temp             PowerShellGet
Az.SignalR                     2.1.0            /usr/cloudshell/temp             PowerShellGet
Az.Sql                         6.0.1            /usr/cloudshell/temp             PowerShellGet
Az.SqlVirtualMachine           2.4.0            /usr/cloudshell/temp             PowerShellGet
Az.StackHCI                    2.5.0            /usr/cloudshell/temp             PowerShellGet
Az.StackHCIVM                  1.1.0            /usr/cloudshell/temp             PowerShellGet
Az.Storage                     8.1.0            /usr/cloudshell/temp             PowerShellGet
Az.StorageMover                1.5.0            /usr/cloudshell/temp             PowerShellGet
Az.StorageSync                 2.4.0            /usr/cloudshell/temp             PowerShellGet
Az.StreamAnalytics             2.1.0            /usr/cloudshell/temp             PowerShellGet
Az.Support                     2.1.0            /usr/cloudshell/temp             PowerShellGet
Az.Synapse                     3.1.0            /usr/cloudshell/temp             PowerShellGet
Az.Tools.Predictor             1.1.3            https://www.powershellgallery.c… PowerShellGet
Az.TrafficManager              1.3.0            /usr/cloudshell/temp             PowerShellGet
Az.Websites                    3.3.0            /usr/cloudshell/temp             PowerShellGet
AzureAD.Standard.Preview       0.0.0.10         /usr/cloudshell/temp             PowerShellGet
AzurePSDrive                   0.9.3            https://www.powershellgallery.c… PowerShellGet
ExchangeOnlineManagement       3.7.0            https://www.powershellgallery.c… PowerShellGet
GuestConfiguration             4.6.0            https://www.powershellgallery.c… PowerShellGet
Microsoft.Graph.Applications   2.25.0           https://www.powershellgallery.c… PowerShellGet
Microsoft.Graph.Authentication 2.25.0           https://www.powershellgallery.c… PowerShellGet
Microsoft.Graph.Groups         2.25.0           https://www.powershellgallery.c… PowerShellGet
Microsoft.Graph.Identity.Dire… 2.25.0           https://www.powershellgallery.c… PowerShellGet
Microsoft.Graph.Identity.Gove… 2.25.0           https://www.powershellgallery.c… PowerShellGet
Microsoft.Graph.Identity.Sign… 2.25.0           https://www.powershellgallery.c… PowerShellGet
Microsoft.Graph.Users.Actions  2.25.0           https://www.powershellgallery.c… PowerShellGet
Microsoft.Graph.Users.Functio… 2.25.0           https://www.powershellgallery.c… PowerShellGet
Microsoft.PowerShell.SecretMa… 1.1.2            https://www.powershellgallery.c… PowerShellGet
Microsoft.PowerShell.SecretSt… 1.0.6            https://www.powershellgallery.c… PowerShellGet
MicrosoftPowerBIMgmt           1.2.1111         https://www.powershellgallery.c… PowerShellGet
MicrosoftPowerBIMgmt.Admin     1.2.1111         https://www.powershellgallery.c… PowerShellGet
MicrosoftPowerBIMgmt.Capaciti… 1.2.1111         https://www.powershellgallery.c… PowerShellGet
MicrosoftPowerBIMgmt.Data      1.2.1111         https://www.powershellgallery.c… PowerShellGet
MicrosoftPowerBIMgmt.Profile   1.2.1111         https://www.powershellgallery.c… PowerShellGet
MicrosoftPowerBIMgmt.Reports   1.2.1111         https://www.powershellgallery.c… PowerShellGet
MicrosoftPowerBIMgmt.Workspac… 1.2.1111         https://www.powershellgallery.c… PowerShellGet
MicrosoftTeams                 6.7.0            https://www.powershellgallery.c… PowerShellGet
PSReadLine                     2.3.6            https://www.powershellgallery.c… PowerShellGet
SHiPS                          0.8.1            https://www.powershellgallery.c… PowerShellGet
SqlServer                      22.3.0           https://www.powershellgallery.c… PowerShellGet
NuGet                          1.3.3            https://www.powershellgallery.c… PowerShellGet

Der Schwerpunkt liegt natürlich auf allen Aspekten von Azure-Diensten. Wer aber genau hinschaut, findet hier sehr wohl, dass "MicrosoftTeams" als auch "ExchangeOnlineManagement" schon vorhanden sind, bzw. die Cloud Shell weiß, woher die Dateien kommen können. Sie können einfach mal "Connect-" eingeben und mit einem Druck auf die TAB-Taste passende Vorschläge anzeigen lassen (Linux Funktion)

Hier sehen Sie schön, dass sie sich direkt mit AzureAd, Graph, MicrosoftTeams, MGGraph und ExchangeOnline verbinden können. Im Jan 2025 war aber die neue Microsoft.Entra-PowerShell noch nicht vorhanden.

Connect-ExchangeOnline

Um meinen Exchange Online Tenant zu verwalten, muss ich

Die PowerShell lädt dynamische entsprechende Module nach. So sind die Exchange Module erst nicht vorhanden aber die Azure Cloud PowerShell weiß sehr wohl, dass es ein Connect-ExchangeOnline gibt was ich direkt eingeben kann

# Verbinde die Exchange PowerShell
Connect-ExchangeOnline

# folgender Befehl ist alt aber finden Sie immer noch in einigen Blogs
Connect-EXOPSSession

Danach sind vier weitere Module ohne Rückfrage hinzugekommen.

Neben dem Modul "ExchangeOnlineManagement" gibt es eine Remote PowerShell "tmpEXO_*"  mit den alten Exchange Commandlets. Sie können also Get-EXOMailbox als auch wie bisher Get-Mailbx etc. nutzen.

Get-EXOMailbox: Could not load file or assembly 'Microsoft.OData.Core, Version=7.21.3.0,
Culture=neutral, PublicKeyToken=31bf3856ad364e35'. Could not find or load a specific file. (0x80131621) 

Auch der Versuch das entsprechende Modul nachzuladen, war nicht erfolgreich:

Install-Module nuget
Install-Package microsoft.odata.core 
Install-Package microsoft.odata.core -RequiredVersion 7.21.3.0 -Force -Scope currentUser

Eine Lösung habe ich dazu noch nicht.  

Entra ID

Auch wenn im Jan 2025 das neue Microsoft.Entra-Modul nicht im Standard enthalten war, können wir es nachinstallieren. Allerdings blockierte hier ein anderes Modul das Update oder die Installation von Microsoft Graph

Die Anmeldung erfolgte dann über das "DeviceLogin" auf einem Browser.

Was kann ich nun damit machen?

Zuallererst kann ich damit einfach von jedem PC der Welt mit einem Browser und Zugriff auf  https://portal.azure.com eine PowerShell starten und mit entsprechenden Berechtigungen in einem Tenant Äderungen per PowerShell durchführen. Das ist eigentlich schon alles. Ich kann hier nicht mehr machen, als ich auch auf meinem lokalen Computer mit einer PowerShell machen kann.

Mit der Cloud Shell brauche ich aber keine lokale PowerShell und kann die Funktionen überall nutzen, wo ein Browser verwendbar ist. Das funktioniert auch auf einem Chromebook, einem ThinClient und im Extremfall auf einem SmartTV. Es ist einfach ein weiterer Weg. Sichern Sie auf jeden Fall ihre Zugänge per MFA ab.

Weitere Links