Recherche de site Web

Utilisation de GitHub Copilot pour mettre à niveau les scripts PowerShell vers le SDK Microsoft Graph PowerShell


Présentation de GitHub Copilot

Microsoft standardise l'API Microsoft Graph pour l'accès par programmation à la configuration des locataires Microsoft 365, aux applications et aux données utilisateur au lieu de s'appuyer sur des modules PowerShell plus anciens comme Azure AD, Azure AD Preview et MSOL. En fait, ces trois modules sont obsolètes. Bien que la date de dépréciation ait été repoussée, les organisations devraient prévoir de mettre à jour leurs scripts afin de ne plus dépendre de ces modules.

GitHub Copilot peut vous aider avec la mise à niveau. GitHub Copilot est un outil de complétion et de suggestion de code basé sur l'IA développé par GitHub en collaboration avec OpenAI, le créateur de ChatGPT. Il aide toute personne à écrire du code en fournissant des suggestions de code en temps réel et une saisie semi-automatique basée sur les commentaires en langage naturel et le contexte dans les éditeurs de code. La combinaison des suggestions de code et de la compréhension de Copilot de PowerShell peut aider les administrateurs de locataires à convertir leurs anciens scripts pour utiliser les applets de commande du SDK Microsoft Graph PowerShell. Il est important de noter que GitHub Copilot n'est qu'un outil. Cela ne peut pas remplacer une compréhension fondamentale du fonctionnement de Microsoft Graph. Pour ceux qui souhaitent comprendre le SDK Microsoft Graph, Practical 365 propose une vaste collection d'articles couvrant l'utilisation du SDK Microsoft Graph PowerShell.

Ce démarrage rapide pour Github Copilot vous guide tout au long de l'inscription et de l'installation du plug-in pour Visual Studio Code. Si vous n’êtes pas encore inscrit, il existe un essai gratuit de 30 jours. Après les 30 jours, les frais sont de 10,00 $/mois. Il y a beaucoup de choses que vous pouvez faire en 30 jours, cela vaut donc la peine de tester GitHub Copilot.

Avant de commencer à mettre à jour un script

Il y a deux choses à faire avant de toucher au code d'un script :

  • Comprenez ce que fait le script.
  • Testez ce que fait le script.

Peut-être que le scénario a été mis en production avant que vous ne rejoigniez l'organisation. Peut-être que le scénariste a récemment quitté l'organisation. Si vous ne savez pas ce que fait le script et que vous apportez des modifications, comment pouvez-vous savoir s'il fait toujours ce qu'il est censé faire ? Le script a-t-il généré une erreur toutes les 10ème fois qu'il s'est exécuté avant de mettre à jour le code ou s'agit-il d'un nouveau problème ?

Une suite de tests pourrait servir de simple liste de contrôle pour s’assurer que le script fait tout ce qu’il est censé faire. En fonction du script, il peut être prudent de vérifier et de s’assurer qu’il ne fait rien d’inhabituel. Si vous souhaitez automatiser les tests, pensez à utiliser Pester. Que les tests soient automatisés ou non, vous devez connaître les résultats attendus afin de pouvoir les comparer aux résultats de vos scripts mis à jour.

L’essentiel est qu’une fois que vous commencez à mettre à jour le code, vous devez savoir ce qui fonctionne et ce qui ne fonctionne pas avant d’apporter des modifications.

Mise à jour du code de script avec GitHub Copilot

Pour mettre à jour un script, ne lancez pas tout le code sur CoPilot et dites « Réécrivez-le à l'aide du SDK Microsoft Graph PowerShell ». Au lieu de cela, examinez le code et déterminez où les applets de commande des modules existants sont utilisées. À partir de là, utilisez Copilot pour remplacer ces lignes de code.

J'ai un script similaire à « Comment créer un rapport de licence Microsoft 365 à l'aide du SDK Microsoft Graph pour PowerShell » qui génère un rapport d'inventaire de licences pour un locataire Microsoft 365. Le script utilise le module MSOL, se connecte à Microsoft 365 à l'aide de l'applet de commande Connect-MSOLService, obtient les SKU du produit et génère un rapport basé sur le nombre de licences disponibles. Ce script contient environ 350 lignes de code. Cependant, l’essentiel de ce qui devait changer ne concernait qu’une dizaine de lignes de code. J'ai copié ces lignes de code dans un fichier de script temporaire et j'ai commencé à interagir avec Copilot.

Le code ci-dessous est un extrait d'une partie du code original. Plutôt que de générer un rapport HTML complet, cet extrait écrit les variables afin que je puisse tester le résultat de l'ancienne version et le comparer à la nouvelle version.

Connect-MSOlService
$licenses = Get-MSOlAccountSku
Foreach ($license in $licenses)
{
    if($license.AccountSkuId -eq "andylanddev:SPE_E3")
    {
        $spe3Active = $license.ActiveUnits
        $spe3Warning = $license.WarningUnits
        $spe3Consumed = $license.ConsumedUnits
    }
    if($license.AccountSkuId -eq "andylanddev:SPE_E5")
    {
        $spe5Active = $license.ActiveUnits
        $spe5Warning = $license.WarningUnits
        $spe5Consumed = $license.ConsumedUnits
    }
}
$spe3Warning
$spe3Active
$spe3Consumed
$spe5Warning
$spe5Active
$spe5Consumed

Après avoir terminé le démarrage rapide pour Github Copilot, l'extension Copilot Chat Visual Studio Code devrait être installée.

Dans la figure 1, j'ai sélectionné le code ci-dessus et j'ai demandé à Copilot Chat de « Mettre à jour ce code afin qu'il utilise le module Microsoft.Graph PowerShell plutôt que le module MSOL. »

Copilot a effectué plusieurs actions pour mettre à niveau le code. Tout d’abord, il a remplacé l’applet de commande Get-MSOLAccountSku par Get-MgSubscribeSku. Copilot savait également que la propriété AccountSkuId devait être remplacée par SkuPartNumber.

J'ai copié le nouveau code sous l'ancien code dans demoscript.ps1 pour faciliter la comparaison du résultat (Figure 2)

Ce n'est pas évident sur cette capture d'écran, mais un problème que j'ai rencontré était que la portée utilisée par Copilot n'était pas correcte. Copilot a suggéré d'utiliser Directory.Read.All. Cependant, la documentation de l'API List Subscribed SKUs indique que cet appel d'API nécessite l'autorisation Organization.Read.All. En plus de la documentation officielle de Microsoft, lisez cet article sur Comment déterminer les autorisations Microsoft Graph dont vous avez besoin, pour une explication détaillée sur la détermination des étendues requises pour les applets de commande.

Je me retrouve à « discuter » avec GitHub Copilot presque comme s'il s'agissait d'un partenaire de programmation en binôme. Je voulais m'assurer que la prochaine fois que je demanderais, cela fournirait la bonne portée.

Même si j'avais les bonnes étendues, Github Copilot a écrit l'URI complet de la portée, illustré dans la figure 2. J'ai modifié cela pour utiliser la version plus courte, en Organization.Read.All (Figure 3). J'ai également ajouté le commutateur de paramètre « NoWelcome » pour minimiser la sortie lorsque le script se connecte au graphique. En dehors de cela, le résultat des anciens et des nouveaux scripts était le même. Lorsque vous êtes à l'aise avec la réussite des tests, vous pouvez commencer à tester l'intégralité du script pour le mettre à niveau vers le SDK Microsoft Graph PowerShell.

Une copie du code original et la version mise à jour peuvent être trouvées sur ce Github Gist.

Github Copilot s'améliore régulièrement

Lorsque j'ai commencé à utiliser GitHub Copilot il y a un peu plus d'un an, j'ai abandonné après environ une semaine de jeu. C’était un jouet mignon, mais il causait plus de problèmes qu’il n’en résolvait. Il y a environ 6 mois, j'ai décidé de réessayer et les améliorations en matière de complétion du code étaient incroyables. Les suggestions étaient exactes environ 90 % du temps.

Cependant, la fonctionnalité qui m'a finalement permis de commencer à payer 10 $/mois est GitHub Copilot Chat, qui a été annoncée lors de Microsoft Build plus tôt cette année et qui est désormais disponible pour tout le monde. Consultez cet article pour plus de détails sur l’annonce. Avec l'introduction de Copilot Chat, je n'ai plus besoin de mémoriser un tas de raccourcis clavier ou de parcourir les menus de mon IDE pour refactoriser le code. Je peux simplement demander à Copilot Chat d'« Ajouter une aide basée sur des commentaires à cette fonction » et il ajoute automatiquement l'aide et constitue un excellent point de départ pour une description et un résumé de la fonction que j'écris (Figure 4).

Je ne veux pas que la portée soit un paramètre, je demande donc à Copilot Chat de la supprimer (Figure 5).

GitHub Copilot fait tellement de travail subalterne pour moi lorsque j'écris du code que je me sens frustré lorsque je travaille dans un IDE qui n'a pas accès à GitHub Copilot.

GitHub Copilot est-il parfait ? Absolument pas. Tout ce qu'il produit doit être testé et vérifié. Le développement de cas de test et leur mise en œuvre doivent toujours faire partie du développement de scripts.

Bien que subtil, je peux dire que cela a changé ma façon d'écrire du code, pour moi, cela vaut absolument 10 $par mois. Si vous écrivez du code PowerShell au moins une fois par semaine, je dirais que GitHub Copilot est un investissement rentable. Si vous n’en êtes pas encore là, essayez à nouveau dans 3 à 6 mois et vous serez probablement agréablement surpris.

Gestion des risques de cybersécurité pour Active Directory

Découvrez comment prévenir et récupérer des attaques AD grâce à ces solutions de gestion des risques de cybersécurité.

Articles connexes