Uso de GitHub Copilot para actualizar scripts de PowerShell al SDK de Microsoft Graph PowerShell

Presentamos el copiloto de GitHub

Microsoft está estandarizando la API de Microsoft Graph para el acceso programático a la configuración, las aplicaciones y los datos de usuario de los inquilinos de Microsoft 365 en lugar de depender de módulos de PowerShell más antiguos como Azure AD, Azure AD Preview y MSOL. De hecho, estos tres módulos están en desuso. Si bien la fecha de desuso ha cambiado, las organizaciones deben planear actualizar sus scripts para que ya no dependan de estos módulos.

GitHub Copilot puede ayudar con la actualización. GitHub Copilot es una herramienta de sugerencia y finalización de código impulsada por IA desarrollada por GitHub en colaboración con OpenAI, los creadores de ChatGPT. Ayuda a cualquiera que escriba código al proporcionar sugerencias de código en tiempo real y autocompletado basado en comentarios en lenguaje natural y contexto dentro de los editores de código. La combinación de sugerencias de código y la comprensión de Copilot sobre PowerShell puede ayudar a los administradores de inquilinos a convertir sus scripts heredados para usar cmdlets del SDK de Microsoft Graph PowerShell. Es importante tener en cuenta que GitHub Copilot es sólo una herramienta. No puede reemplazar la comprensión fundamental de cómo funciona Microsoft Graph. Para aquellos interesados ​​en comprender el SDK de Microsoft Graph, Practical 365 tiene una extensa colección de artículos que cubren el uso del SDK de Microsoft Graph PowerShell.

Este inicio rápido para Github Copilot lo guía a través del registro e instalación del complemento para Visual Studio Code. Si aún no te has registrado, hay una prueba gratuita de 30 días. Después de los 30 días, la tarifa es de $10,00/mes. Hay muchas cosas que puedes hacer en 30 días, por lo que vale la pena probar GitHub Copilot.

Antes de comenzar a actualizar un script

Hay dos cosas que se deben hacer antes de tocar cualquier código en un script:

  • Comprenda lo que hace el guión.
  • Pruebe lo que hace el guión.

Quizás el guión se puso en producción antes de que usted se uniera a la organización. Quizás el autor del guión dejó recientemente la organización. Si no sabe lo que hace el guión y realiza cambios, ¿cómo puede saber si todavía hace lo que se supone que debe hacer? ¿El script arrojó un error cada décima vez que se ejecutó antes de actualizar el código o es un problema nuevo?

Un conjunto de pruebas podría actuar como una simple lista de verificación para garantizar que el script haga todo lo que se supone que debe hacer. Dependiendo del script, puede ser prudente comprobarlo y asegurarse de que no esté haciendo nada que no debería estar haciendo. Si está interesado en automatizar pruebas, considere utilizar Pester. Ya sea que las pruebas estén automatizadas o no, debe saber cuáles son los resultados esperados para poder compararlos con los resultados de sus scripts actualizados.

La conclusión es que una vez que comienzas a actualizar el código, debes saber qué funciona y qué no antes de realizar cualquier cambio.

Actualización del código de secuencia de comandos con GitHub Copilot

Para actualizar una secuencia de comandos, no arroje todo el código a CoPilot y diga «Vuelva a escribir esto usando el SDK de Microsoft Graph PowerShell». En su lugar, revise el código y averigüe dónde se utilizan los cmdlets de los módulos heredados. A partir de ahí, utilice Copilot para reemplazar esas líneas de código.

Tengo una secuencia de comandos similar a «Cómo crear un informe de licencias de Microsoft 365 utilizando el SDK de Microsoft Graph para PowerShell» que genera un informe de inventario de licencias para un inquilino de Microsoft 365. El script utiliza el módulo MSOL, se conecta a Microsoft 365 mediante el cmdlet Connect-MSOLService, obtiene los SKU del producto y genera un informe basado en la cantidad de licencias disponibles. Este script tiene aproximadamente 350 líneas de código. Sin embargo, el núcleo de lo que se necesitaba cambiar era solo unas 10 líneas de código. Copié esas líneas de código en un archivo de script temporal y comencé a interactuar con Copilot.

El siguiente código es un extracto de parte del código original. En lugar de generar un informe HTML completo, este fragmento escribe las variables para que pueda probar el resultado de la versión anterior y compararlo con la nueva versión.

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

Después de completar el inicio rápido para Github Copilot, debe tener instalada la extensión Copilot Chat Visual Studio Code.

En la Figura 1, seleccioné el código que se muestra arriba y le pedí a Copilot Chat que dijera «Actualice este código para que use el módulo Microsoft.Graph PowerShell en lugar del módulo MSOL».

Figura 1: GitHub Copilot actualiza un bloque de código

Copilot realizó varias acciones para actualizar el código. Primero, reemplazó el cmdlet Get-MSOLAccountSku por Get-MgSubscribedSku. Copilot también sabía que la propiedad AccountSkuId debía reemplazarse por SkuPartNumber.

Copié el nuevo código debajo del código anterior en demoscript.ps1 para facilitar la comparación del resultado (Figura 2).

Figura 2: Comparación de resultados del código antiguo y nuevo

No es obvio en esta captura de pantalla, pero un problema que encontré fue que el alcance que usó Copilot no era correcto. Copilot sugirió que se utilice Directory.Read.All. Sin embargo, la documentación de la API Lista de SKU suscritas señala que esta llamada a la API requiere el permiso Organization.Read.All. Además de la documentación oficial de Microsoft, lea este artículo sobre Cómo determinar qué permisos de Microsoft Graph necesita para obtener una explicación detallada sobre cómo determinar los alcances necesarios para los cmdlets.

Me encuentro «chateando» con GitHub Copilot casi como si fuera un socio de programación en pareja. Quería asegurarme de que la próxima vez que preguntara, proporcionaría el alcance correcto.

Figura 3: Fijación de osciloscopios mediante Copilot

Aunque tenía los alcances correctos, Github Copilot escribió el URI completo del alcance, que se muestra en la Figura 2. Cambié esto para usar la versión más corta, a Organization.Read.All (Figura 3). También agregué el interruptor de parámetro «NoWelcome» para minimizar la salida cuando el script se conecta al gráfico. Aparte de eso, el resultado de los guiones antiguos y nuevos fue el mismo. Cuando se sienta cómodo con las pruebas aprobadas, puede comenzar a probar el script completo para actualizarlo al SDK de Microsoft Graph PowerShell.

Puede encontrar una copia del código original y la versión actualizada en este Github Gist.

Github Copilot mejora constantemente

Cuando comencé a usar GitHub Copilot hace poco más de un año, lo dejé después de aproximadamente una semana de jugar. Era un juguete lindo, pero causaba más problemas de los que solucionaba. Hace aproximadamente 6 meses, decidí intentarlo de nuevo y las mejoras en la finalización del código fueron increíbles. Las sugerencias fueron acertadas aproximadamente el 90% de las veces.

Sin embargo, la característica que finalmente me hizo comenzar a pagar $10 al mes es GitHub Copilot Chat, que se anunció en Microsoft Build a principios de este año y ahora está disponible para todos. Consulte este artículo para obtener detalles sobre el anuncio. Con la introducción de Copilot Chat, ya no necesito memorizar un montón de atajos de teclado ni buscar en los menús de mi IDE para refactorizar el código. Simplemente puedo pedirle a Copilot Chat que «Agregue ayuda basada en comentarios a esta función» y agrega la ayuda automáticamente y proporciona un excelente punto de partida para una descripción y sinopsis de la función que estoy escribiendo (Figura 4).

Figura 4: Copilot agregando ayuda a una función

No quiero que el alcance sea un parámetro, así que le pido a Copilot Chat que lo elimine (Figura 5).

Figura 5: Pídale a Copilot que elimine el parámetro

GitHub Copilot hace tanto trabajo menor cuando escribo código que me siento frustrado cuando trabajo en un IDE que no tiene acceso a GitHub Copilot.

¿Es perfecto GitHub Copilot? Absolutamente no. Todo lo que produce debe ser probado y verificado. Desarrollar casos de prueba e implementarlos siempre debe ser parte del desarrollo de scripts.

Aunque sutil, puedo decir que ha cambiado la forma en que escribo el código; para mí vale absolutamente $10 al mes. Si escribe código PowerShell al menos una vez por semana, diría que GitHub Copilot es una inversión que vale la pena. Si aún no ha llegado a ese punto, inténtelo de nuevo dentro de 3 a 6 meses y probablemente quedará gratamente sorprendido.