Comment utiliser Cloud Shell à partir du centre d'administration Microsoft Teams
Mais un meilleur choix est le bon vieux PowerShell
Annoncée dans la notification du centre de messages MC289245 (4 octobre 2021, élément 82708 de la feuille de route Microsoft 365), la possibilité d'appeler une session Azure Cloud Shell à partir du centre d'administration Teams est désormais disponible dans les locataires. Apparemment, l'idée est de permettre aux administrateurs Teams d'effectuer des tâches à l'aide d'applets de commande dans le module Microsoft Teams PowerShell sans avoir à installer quoi que ce soit sur un poste de travail. Comme indiqué ci-dessous, Cloud Shell peut certainement exécuter les applets de commande Teams, mais les limitations imposées par la mise en œuvre sont telles que je ne recommande pas d'utiliser cette approche, sauf si vous y êtes absolument obligé.
Exécuter Cloud Shell
Pour démarrer une nouvelle session Cloud Shell, cliquez sur l'icône en forme de coquille dans la barre du navigateur. Un volet s'ouvre sous le centre d'administration, se connecte à Azure et crée un lecteur cloud. En arrière-plan, Azure crée une nouvelle instance PowerShell Core exécutée sur une machine virtuelle Linux sur un hôte Hyper-V. À bien des égards, les choses n’ont pas beaucoup évolué depuis que Vasil Michev a enquêté sur Cloud Shell il y a trois ans.
Une fois connecté à une session shell, vous pouvez exécuter l'applet de commande Connect-MicrosoftTeams pour vous connecter à Teams et charger les applets de commande à partir du module. Après avoir chargé le module, vous pouvez exécuter ses applets de commande (Figure 1).
Pas seulement le centre d’administration Teams
La même fonctionnalité est disponible si vous démarrez une session Cloud Shell à partir du centre d'administration Microsoft 365. En d’autres termes, la nouveauté n’est pas que vous puissiez démarrer Cloud Shell depuis le centre d’administration Teams. C'est plutôt que Microsoft a réalisé l'ingénierie pour rendre les applets de commande Teams disponibles dans Cloud Shell, quel que soit l'endroit à partir duquel vous créez une session Cloud Shell. J'ai pu exécuter des applets de commande Teams dans Cloud Shell à partir du centre d'administration Microsoft 365, du portail Azure, du centre d'administration Teams et de l'application mobile Azure pour iOS (je ne recommanderais pas cette dernière).
Abonnement Azure requis
Avant de pouvoir vous connecter à Cloud Shell depuis le centre d'administration Teams, vous devez vous connecter avec un compte connecté à un abonnement Azure. La raison en est que les sessions Cloud Shell utilisent le stockage Azure pour la machine virtuelle Linux, pour conserver les données temporaires et stocker les scripts téléchargés. L'abonnement couvre l'utilisation du stockage Azure.
La nécessité d’un compte pour disposer d’un abonnement n’est pas un problème si vous utilisez le même compte pour la gestion des abonnements et l’administration Teams, ce qui est tout à fait possible dans un petit locataire. Dans les locataires plus importants, vous devez attribuer un rôle Azure approprié pour un abonnement à tous les comptes sur lesquels vous souhaitez effectuer des actions administratives impliquant cet abonnement.
Généralement, j'attribue le rôle de coordinateur Azure aux comptes utilisés pour l'administration des locataires car cela suffit pour utiliser les ressources (comme le stockage) liées à l'abonnement. Vous constaterez peut-être qu’un rôle Azure différent (tel que co-administrateur) convient mieux à votre situation. La figure 2 montre les comptes détenant le rôle Contributeur pour un abonnement dans le Centre d'administration Azure.
Connexion aux équipes
Après avoir satisfait aux exigences d'Azure, nous pouvons nous connecter à Teams. La documentation de Microsoft pour Teams PowerShell indique que vous pouvez exécuter l'applet de commande Connect-MicrosoftTeams sans aucun paramètre. Voici ce qui se passe :
PS /home/global> Connect-MicrosoftTeams
WARNING: Interactive authentication is not supported in this session. Using parameter '-Identity' instead.
Account Environment Tenant TenantId
------- ----------- ------ --------
MSI@50342 AzureCloud a562313f-14fc-43a2-9a7a-d2e27f4f3478 a562313f-14fc-43a2-9a7a-d2e27f4f3478
Notez que le compte utilisé est MSI@50342 plutôt que le compte connecté au centre d'administration Teams. Il s'agit d'une forme de pseudo-compte utilisée par Cloud Shell lorsqu'il hérite de l'authentification d'une console comme le centre d'administration Teams. Cependant, les applets de commande issues du connecteur Skype Entreprise Online (retiré en février 2021) qui sont désormais incluses dans le module Teams utilisent un point de terminaison et un mécanisme d'authentification différents. L'effet net est que si vous essayez d'exécuter ces applets de commande, vous obtenez une erreur 404 :
PS /home/global> Get-CsTeamsMeetingPolicy
Get-CsTeamsMeetingPolicy: The remote server returned an error: (404) Not Found.
PS /home/global> Get-CsTeamsMessagingPolicy
Get-CsTeamsMessagingPolicy: The remote server returned an error: (404) Not Found.
Tout fonctionne si vous vous connectez à Teams avec les informations d'identification d'un compte spécifique, à moins qu'il n'utilise l'authentification multifacteur. Le problème avec l'authentification multifacteur est que Cloud Shell s'exécute dans une fenêtre de terminal, il n'y a donc aucun moyen d'afficher la boîte de dialogue de connexion interactive. Vous pouvez utiliser l'authentification de base pour vous connecter à un compte, et une fois connecté, les nouvelles et anciennes applets de commande (Skype) fonctionnent parfaitement. Les locataires doivent sécuriser tous les comptes d’administrateur avec une authentification multifacteur, je ne recommande donc pas cette approche.
PS /home/global> $O365Cred = Get-Credential
PowerShell credential request
Enter your credentials.
User: Admin@office365itpros.com
Password for user Admin@office365itpros.com: ************
PS /home/global> connect-microsoftteams -Credential $O365Cred
Account Environment Tenant TenantId
------- ----------- ------ --------
Admin@office365itpros.com AzureCloud as62313f-14fc-43a2-9a7a-d2e27f4f3478 as62313f-14fc-43a2-9a7a-d2e27f4f3478
PS /home/global> Get-CsTeamsFeedbackPolicy
Identity : Global
UserInitiatedMode : Enabled
ReceiveSurveysMode : EnabledUserOverride
AllowScreenshotCollection : False
AllowEmailCollection : False
AllowLogCollection : False
La solution et l’approche recommandée consistent à utiliser l’authentification de l’appareil pour vous connecter à Teams. Cette méthode génère un identifiant unique à saisir dans une page Web.
PS /home/global> Connect-MicrosoftTeams -UseDeviceAuthentication
To sign in, use a web browser to open the page https://microsoft.com/devicelogin and enter the code C5BQJLUJ8 to authenticate.
Après avoir saisi le code, il vous est demandé avec quel compte vous connecter, puis de confirmer que vous souhaitez utiliser une application Microsoft Graph appelée Applets de commande PowerShell MS Teams (Figure 3).
Pour plus d'informations sur la façon dont les applications Microsoft Graph utilisent l'authentification des appareils, lisez ce blog de Lee Ford.
Exécuter PowerShell dans Cloud Shell
Après vous être connecté à l'aide d'un compte approprié, vous pouvez exécuter n'importe laquelle des applets de commande incluses dans la dernière version du module Microsoft Teams PowerShell (2.6.0 au moment de la rédaction). Vous pouvez également télécharger des scripts depuis un poste de travail vers Azure pour leur permettre de s'exécuter dans Cloud Shell. La figure 4 montre le résultat de l'exécution d'un script simple pour signaler le nom d'affichage des utilisateurs Teams avec Get-CsOnlineUser.
Les scripts téléchargés pour s'exécuter dans Cloud Shell s'exécutent sans problème si vous les limitez aux applets de commande Teams et aux commandes PowerShell de base telles que ForEach-Object, Select-Object et Where. -Objet. Cependant, vous pouvez rencontrer des problèmes si vous n’épelez pas complètement les noms de commandes. Par exemple, il est courant d'utiliser Sort au lieu de Sort-Object dans des commandes telles que :
Get-Team | Sort DisplayNameCloud Shell proteste si vous exécutez la commande :
Get-Team | Sort DisplayName
/usr/bin/sort: cannot read: displayname: No such file or directory
Ce type de problème souligne le fait que Cloud Shell n’est pas la même chose que l’exécution de PowerShell comme vous pourriez le faire normalement. Il s'agit d'un environnement distinct avec ses propres particularités et exigences, et si vous prévoyez de l'utiliser en production, vous devez écrire du code en pensant à Cloud Shell.
En plus de s'assurer que la syntaxe de base est correcte, les choses deviennent plus compliquées lorsque vous devez utiliser des applets de commande d'autres modules. Teams s'appuie sur plusieurs composants issus de l'écosystème Microsoft 365 et la dure réalité de la vie administrative est que pour que les administrateurs puissent effectuer leur travail, ils doivent souvent utiliser des applets de commande d'autres modules tels que SharePoint Online ou le SDK Microsoft Graph pour PowerShell.
Par exemple, je ne pouvais pas faire fonctionner Azure AD dans Cloud Shell à partir du centre d’administration Teams ou du centre d’administration Microsoft 365. Une note dans GitHub explique que Cloud Shell dispose d'une fonction spéciale pour remplacer la fonction Connect-AzureAD par défaut afin d'éviter aux utilisateurs d'avoir à saisir à nouveau leurs informations d'identification. C'est peut-être là que réside le problème.
Du côté positif, vous pouvez vous connecter à Exchange Online PowerShell à l'aide de Remote PowerShell (ce qui signifie qu'aucune des applets de commande REST comme Get-ExoMailbox n'est disponible). Cela fonctionne pour Cloud Shell lorsqu'il est invoqué depuis le centre d'administration Microsoft 365 (Figure 5) ou le centre d'administration Teams.
Globalement, la nécessité d'être certain que tous les modules sont utilisés par des scripts ou pour effectuer des tâches interactives est un facteur limitant pour Cloud Shell.
Accès aux graphiques
Cloud Shell prend en charge les appels d'API Graph à l'aide des applets de commande Invoke-RestMethod ou Invoke-WebRequest. Il s'agit donc également d'une méthode viable pour accéder et traiter les données là où les modules ne fonctionnent pas comme attendu. La figure 6 montre l'utilisation de l'éditeur dans Cloud Shell pour modifier un script qui utilise un appel d'API Graph avec les résultats du script dans la fenêtre du terminal.
Trop de limitations pour le confort
Nul doute que certains apprécieront Cloud Shell et l’utiliseront de manière très productive. Cependant, Cloud Shell ne fonctionne tout simplement pas pour moi. Jouer avec les modules dans l'espoir qu'ils fonctionneront tous ne semble pas être un moyen efficace de travailler lorsque j'ai un environnement parfaitement acceptable entre les sessions PowerShell standards et Visual Studio Code (pour le développement). Tout fonctionne. Tous les modules se chargent. Les commandes s'exécutent. La mémoire musculaire surmonte tous les défauts qui existent dans le fonctionnement de la configuration. Je doute que j'utilise jamais beaucoup Cloud Shell, voire pas du tout. Mais ce n’est pas une raison pour ne pas l’essayer et vous faire votre propre opinion.





