Cómo utilizar Cloud Shell desde el Centro de administración de Microsoft Teams
Pero una mejor opción es el antiguo PowerShell
Anunciada en la notificación MC289245 del centro de mensajes (4 de octubre de 2021, elemento 82708 de la hoja de ruta de Microsoft 365), la capacidad de invocar una sesión de Azure Cloud Shell desde el centro de administración de Teams ahora está disponible en los inquilinos. Aparentemente, la idea es permitir a los administradores de Teams realizar tareas utilizando cmdlets en el módulo PowerShell de Microsoft Teams sin tener que instalar nada en una estación de trabajo. Como se analiza a continuación, Cloud Shell ciertamente puede ejecutar los cmdlets de Teams, pero las limitaciones impuestas por la implementación son tales que no recomiendo usar este enfoque a menos que sea absolutamente necesario.
Ejecución de Cloud Shell
Para iniciar una nueva sesión de Cloud Shell, haga clic en el icono de Shell en la barra del navegador. Se abre un panel debajo del centro de administración, se conecta a Azure y crea una unidad en la nube. Entre bastidores, Azure crea una nueva instancia de PowerShell Core que se ejecuta en una máquina virtual Linux en un host Hyper-V. En muchos aspectos, las cosas no han avanzado mucho desde que Vasil Michev investigó Cloud Shell hace tres años.
Una vez conectado a una sesión de shell, puede ejecutar el cmdlet Connect-MicrosoftTeams para conectarse a Teams y cargar los cmdlets desde el módulo. Después de cargar el módulo, puede ejecutar sus cmdlets (Figura 1).
No solo el Centro de administración de Teams
La misma funcionalidad está disponible si inicia una sesión de Cloud Shell desde el centro de administración de Microsoft 365. En otras palabras, la novedad no es que pueda iniciar Cloud Shell desde el centro de administración de Teams. Más bien, es que Microsoft ha realizado la ingeniería para que los cmdlets de Teams estén disponibles para Cloud Shell, sin importar desde dónde cree una sesión de Cloud Shell. Pude ejecutar cmdlets de Teams en Cloud Shell desde el centro de administración de Microsoft 365, el portal de Azure, el centro de administración de Teams y la aplicación móvil de Azure para iOS (no recomendaría esta última).
Se requiere suscripción a Azure
Antes de poder conectarse a Cloud Shell desde el centro de administración de Teams, debe iniciar sesión con una cuenta conectada a una suscripción de Azure. El motivo es que las sesiones de Cloud Shell utilizan el almacenamiento de Azure para la máquina virtual Linux y para almacenar datos temporales y scripts cargados. La suscripción cubre el uso de almacenamiento de Azure.
La necesidad de que una cuenta tenga una suscripción no es un problema si usa la misma cuenta tanto para la gestión de suscripciones como para la administración de Teams, lo cual es muy posible en un inquilino pequeño. En inquilinos más grandes, debe asignar un rol de Azure adecuado para una suscripción a todas las cuentas en las que desee realizar acciones administrativas relacionadas con esa suscripción.
Normalmente, asigno el rol de coordinador de Azure a las cuentas utilizadas para la administración de inquilinos, ya que eso es suficiente para usar recursos (como almacenamiento) vinculados a la suscripción. Es posible que descubra que un rol diferente de Azure (como el de coadministrador) se adapta mejor a sus circunstancias. La Figura 2 muestra cuentas que tienen el rol de Colaborador para una suscripción en el Centro de administración de Azure.
Conexión con equipos
Después de cumplir con los requisitos de Azure, podemos conectarnos a Teams. La documentación de Microsoft para Teams PowerShell dice que puede ejecutar el cmdlet Connect-MicrosoftTeams sin ningún parámetro. Esto es lo que sucede:
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
Tenga en cuenta que la cuenta utilizada es MSI@50342 en lugar de la cuenta que inició sesión en el centro de administración de Teams. Esta es una forma de pseudocuenta utilizada por Cloud Shell cuando hereda la autenticación de una consola como el centro de administración de Teams. Sin embargo, los cmdlets que provienen de Skype Empresarial Online Connector (retirado en febrero de 2021) que ahora se incluyen en el módulo Teams utilizan un punto final y un mecanismo de autenticación diferentes. El efecto neto es que si intenta ejecutar estos cmdlets, obtendrá un error 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.
Todo funciona si inicia sesión en Teams con credenciales para una cuenta específica, a menos que utilice autenticación multifactor. El problema con la autenticación multifactor es que Cloud Shell se ejecuta en una ventana de terminal, por lo que no hay forma de mostrar el cuadro de diálogo de inicio de sesión interactivo. Puede utilizar la autenticación básica para iniciar sesión en una cuenta y, una vez conectado, tanto los cmdlets nuevos como los antiguos (Skype) se ejecutan perfectamente. Los inquilinos deben proteger todas las cuentas de administrador con autenticación multifactor, por lo que no recomiendo este enfoque.
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 solución y el enfoque recomendado es utilizar la autenticación del dispositivo para iniciar sesión en Teams. Este método genera un identificador único para ingresar en una página 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.
Después de ingresar el código, se le preguntará con qué cuenta iniciar sesión y luego confirmará que desea usar una aplicación de Microsoft Graph llamada MS Teams PowerShell Cmdlets (Figura 3).
Para obtener más información sobre cómo las aplicaciones Microsoft Graph utilizan la autenticación del dispositivo, lea este blog de Lee Ford.
Ejecutar PowerShell en Cloud Shell
Una vez que se haya conectado con una cuenta adecuada, puede ejecutar cualquiera de los cmdlets incluidos en la última versión del módulo PowerShell de Microsoft Teams (2.6.0 en el momento de escribir este artículo). También puede cargar scripts desde una estación de trabajo a Azure para permitir que se ejecuten en Cloud Shell. La Figura 4 muestra el resultado de ejecutar un script simple para informar el nombre para mostrar de los usuarios de Teams con Get-CsOnlineUser.
Los scripts cargados para ejecutarse en Cloud Shell se ejecutan sin problemas si los limita a cmdlets de Teams y comandos básicos de PowerShell como ForEach-Object, Select-Object y Dónde. -Objeto. Sin embargo, puede tener problemas si no deletrea completamente los nombres de los comandos. Por ejemplo, es común usar Ordenar en lugar de Ordenar-Objeto en comandos como:
Get-Team | Sort DisplayNameCloud Shell protesta si ejecuta el comando:
Get-Team | Sort DisplayName
/usr/bin/sort: cannot read: displayname: No such file or directory
Este tipo de problema subraya el hecho de que Cloud Shell no es lo mismo que ejecutar PowerShell como lo haría normalmente. Es un entorno independiente con sus propias peculiaridades y requisitos, y si espera utilizarlo en producción, debe escribir código teniendo en cuenta Cloud Shell.
Además de asegurarse de que la sintaxis básica sea correcta, las cosas se vuelven más complicadas cuando necesita utilizar cmdlets de otros módulos. Teams depende de múltiples componentes provenientes de todo el ecosistema de Microsoft 365 y la cruda realidad de la vida administrativa es que, para que los administradores puedan realizar su trabajo, a menudo necesitan usar cmdlets de otros módulos como SharePoint Online o Microsoft Graph SDK para PowerShell.
Por ejemplo, no pude hacer que Azure AD funcionara en Cloud Shell ni desde el centro de administración de Teams ni desde el centro de administración de Microsoft 365. Una nota en GitHub explica que Cloud Shell tiene una función especial para anular la función predeterminada de Connect-AzureAD para evitar la necesidad de que los usuarios vuelvan a ingresar sus credenciales. Quizás aquí es donde radica el problema.
Lo bueno es que puede conectarse a Exchange Online PowerShell mediante PowerShell remoto (lo que significa que ninguno de los cmdlets REST como Get-ExoMailbox está disponible). Esto funciona para Cloud Shell cuando se invoca desde el centro de administración de Microsoft 365 (Figura 5) o el centro de administración de Teams.
En general, la necesidad de estar seguro de que todos los módulos utilizados por los scripts o para realizar tareas interactivas es un factor limitante para Cloud Shell.
Acceso a gráficos
Cloud Shell admite llamadas a Graph API mediante los cmdlets Invoke-RestMethod o Invoke-WebRequest, por lo que este también es un método viable para acceder y procesar datos donde los módulos no funcionan como esperado. La Figura 6 muestra el uso del editor en Cloud Shell para modificar un script que utiliza una llamada a Graph API con los resultados del script en la ventana de terminal.
Demasiadas limitaciones para la comodidad
Sin duda, algunos se deleitarán con Cloud Shell y lo utilizarán de manera muy productiva. Sin embargo, Cloud Shell simplemente no me funciona. Jugar con módulos con la esperanza de que todos funcionen no parece una forma efectiva de trabajar cuando tengo un entorno perfectamente aceptable entre las sesiones estándar de PowerShell y Visual Studio Code (para desarrollo). Todo funciona. Todos los módulos se cargan. Los comandos se ejecutan. La memoria muscular supera cualquier defecto que exista en el funcionamiento de la configuración. Dudo que alguna vez use mucho Cloud Shell, si es que lo hago. Pero esa no es razón para que no lo pruebes y tomes tu propia decisión.





