Cómo conectar y administrar Exchange Online con PowerShell
PowerShell es una herramienta de administración principal tanto para organizaciones locales de Exchange Server como para Exchange Online basado en la nube en Microsoft 365. En este artículo, mostraremos cómo instalar el módulo Exchange Online PowerShell v2 (EXO V2) en Windows, cómo conectarse a su arrendatario de Exchange Online, administrar buzones de correo y otros objetos de Microsoft 365.
Tenga en cuenta que actualmente hay dos módulos para administrar Exchange Online: Exchange Online PowerShell v1 y el moderno Exchange Online PowerShell v2 (EXO v2). A menos que haya una razón clara para usar un módulo antiguo (secuencias de comandos heredadas, etc.), trate de usar siempre EXO v2: funciona más rápido (como un nuevo módulo de Azure AD, se basa en la implementación de la API REST en Microsoft Graph), los cmdlets están optimizados para manejar varios objetos, se usa la autenticación moderna en lugar de la básica, se admite la autenticación MFA, ExchangeOnlineManagement 2.0.4 y las versiones más recientes funcionan en PowerShell Core 6.x, 7x y en macOS, Ubuntu 18.04/20.04.
Instalar el módulo Exchange Online PowerShell V2 (EXO V2)
Para instalar Exchange Online PowerShell en Windows, necesita PowerShell 5.x (PowerShell Core es compatible con ExchangeOnlineManagement 2.0.4 o posterior).
La configuración de la política de ejecución de secuencias de comandos de PowerShell en su computadora debe permitir la ejecución de archivos locales *.PS:
Set-ExecutionPolicy RemoteSignedInstale y actualice el módulo PowershellGet:
Install-Module PowershellGet -Force
Update-Module PowershellGet
Para instalar el módulo EXOv2 (ExchangeOnlineManagement) desde la Galería de secuencias de comandos de PowerShell para todos los usuarios, ejecute este comando:
Install-Module -Name ExchangeOnlineManagement -Force -Scope AllUsersLuego puede importar el módulo a su sesión:
Import-Module ExchangeOnlineManagementAsegúrese de que el módulo se haya instalado. También se muestra su versión (en mi caso es la 2.0.5):
Get-Module ExchangeOnlineManagementEn sus scripts, puede asegurarse de que el módulo esté instalado usando el siguiente comando:
(Get-Module -ListAvailable -Name ExchangeOnlineManagement) -ne $nullPara actualizar el módulo EXOv2, use el siguiente comando:
Update-Module ExchangeOnlineManagementConéctese a Exchange Online con PowerShell
Para conectarse a su arrendatario de Microsoft 365 mediante el módulo Exchange Online, se utiliza el cmdlet Connect-ExchangeOnline. Por ejemplo, puede especificar el UPN de un usuario con una función de administrador global:
Connect-ExchangeOnline -UserPrincipalName max.bak@a-d.onmicrosoft.com -ShowProgress $trueIngrese la contraseña de usuario y confirme el inicio de sesión usando MFA (es más conveniente usar la aplicación Microsoft Authenticator en su teléfono inteligente).
Si no hay un navegador instalado en la computadora (por ejemplo, cuando se conecta a Exchange Online desde Linux o Windows Server Core), puede mostrar un código de autenticación para PowerShell Core 7.x y un cuadro para ingresarlo de la siguiente manera:
Connect-ExchangeOnline -Device
Use la URL y el código que tiene en otra computadora con un navegador.
O usa el
-InlineCredentialopción para ingresar una contraseña en su consola de forma interactiva.
Si su cuenta tiene acceso a varios arrendatarios de Azure, puede especificar el nombre del arrendatario mediante la opción Organización delegada:
Connect-ExchangeOnline -UserPrincipalName max.bak@a-d.onmicrosoft.com -ShowProgress $true -DelegatedOrganization a-dpreprod.onmicrosoft.comSi la autenticación moderna está deshabilitada para la cuenta, puede conectarse de la siguiente manera:
$cred = Get-Credential
Connect-ExchangeOnline -Credential $cred -UserPrincipalName max.bak@a-d.onmicrosoft.com -ShowProgress $truePuede asegurarse de que haya una conexión activa a Exchange Online como se muestra a continuación:
Get-PSSession| ft -AutoSizeEn nuestro ejemplo, la conexión a Outlook.Office365.com está activa (State=
Opened).
Una vez que termine de trabajar con Exchange Online, salga correctamente de la sesión con el cmdlet Disconnect-ExchangeOnline. El problema es que Exchange Online solo admite 5 sesiones simultáneas de PowerShell. Si intenta abrir un sexto, aparece el siguiente error:
Fail to create a runspace because you have exceeded the maximum number of connections allowed.
Puede usar el siguiente código en sus scripts de PowerShell para asegurarse de que la conexión a Exchange Online a través del módulo EXOv2 esté activa. Permitirá evitar sesiones adicionales de PowerShell con Microsoft 365.
$PSSessions = Get-PSSession | Select-Object -Property State, Name
If (((@($PSSessions) -like '@{State=Opened; Name=ExchangeOnlineInternalSession*').Count -gt 0) -ne $true) {
Connect-ExchangeOnline -UserPrincipalName max.bak@a-d.onmicrosoft.com }El siguiente artículo describe cómo conectarse a Exchange local o Exchange Online de forma remota a través de PowerShell sin instalar el módulo EXOv2:
https://a-d.site/connect-exchange-microsoft-365-remote-powershell/
Administración de Exchange Online mediante cmdlets ExchangeOnlineManagement
Puede mostrar una lista de cmdlets disponibles en el módulo EXOv2 con este comando:
Get-Command -Module ExchangeOnlineManagementActualmente, hay 32 cmdlets disponibles:
- Connect-ExchangeOnline
- Connect-IPPSSession
- Disconnect-ExchangeOnline
- Get-WrappedCommand
- IsCloudShellEnvironment
- UpdateImplicitRemotingHandler
- Get-EXOCasMailbox
- Get-EXOMailbox
- Get-EXOMailboxFolderPermission
- Get-EXOMailboxFolderStatistics
- Get-EXOMailboxPermission
- Get-EXOMailboxStatistics
- Get-EXOMobileDeviceStatistics
- Get-EXORecipient
- Get-EXORecipientPermission
- Get-MyAnalyticsFeatureConfig
- Get-OwnerlessGroupPolicy
- Get-UserBriefingConfig
- Get-VivaInsightsSettings
- Set-MyAnalyticsFeatureConfig
- Set-OwnerlessGroupPolicy
- Set-UserBriefingConfig
- Set-VivaInsightsSettings
Tenga en cuenta que los nombres de algunos cmdlets en el módulo Exchange Online han cambiado. La mayoría de ellos tienen el sufijo EXO ahora. Por ejemplo, use Get-EXOMailbox en lugar de Get-Mailbox, Get-EXOMailboxPermission en lugar de Get-MailboxPermission, etc. Entonces, si tiene algún script para EXOv1, necesitará para actualizarlos cuidadosamente para usarlos con EXOv2.
Puede mostrar una lista de buzones en su inquilino de Exchange o información sobre un buzón específico:
Get-EXOMailbox |ft
Get-EXOMailbox jsergoPara mostrar los usuarios con acceso POP e IMAP permitido:
Get-EXOCasMailbox -PropertySets Imap,popPara mostrar el tamaño de todos los buzones:
Get-EXOMailbox | Get-EXOMailboxStatisticsTamaño de todos los buzones compartidos:
Get-EXOMailbox | Where-Object{$_.RecipientTypeDetails -eq "SharedMailbox"} | Get-EXOMailboxStatisticsTenga en cuenta que no hay cmdlet Set-Mailbox en el módulo ExchangeOnlineManagement. El problema es que otros cmdlets de Exchange Online disponibles (más de 750) se importan a su sesión de PowerShell después de conectarse a un arrendatario. En primer lugar, debe obtener un nombre de sesión:
Get-PSSession| select ConfigurationName,CurrentModuleNameUsando el nombre de sesión generado, puede obtener una lista de cmdlets disponibles:
Get-Command -Module tmp_4amp2awk.dgaPara cambiar la dirección SMTP del usuario, puede usar el siguiente comando:
Get-EXOMailbox jsergo | Set-Mailbox -EmailAddresses @{Add='j.sergo@a-d.site'}




