Magic Quadrant™ para la gestión de acceso privilegiado 2025: Netwrix reconocida por cuarto año consecutivo. Descarga el informe.

Plataforma
Centro de recursosBlog
Conéctese a Exchange Online PowerShell

Conéctese a Exchange Online PowerShell

Mar 31, 2025

Exchange Online PowerShell permite una administración segura y automatizada de los entornos de correo de Microsoft 365. Utilizando el módulo EXO V2 con autenticación moderna y MFA, los administradores pueden gestionar buzones, permisos, informes y migraciones a gran escala. Las opciones de identidad gestionada y basada en certificados apoyan la automatización, mientras que las mejores prácticas como RBAC, TLS y la gestión de sesiones fortalecen la seguridad y el cumplimiento.

Introducción a Exchange Online PowerShell

Exchange Online PowerShell es una interfaz de administración de línea de comandos para administrar y automatizar tareas en Exchange Online, que es parte de Microsoft 365. Permite a los administradores gestionar buzones de correo de usuarios, configurar ajustes organizacionales y realizar operaciones masivas de manera eficiente a través de scripts. Aquí hay algunos beneficios de usar PowerShell para la administración de Exchange Online:

  • Escriba scripts para automatizar tareas repetitivas, como la creación de buzones y la asignación de permisos.
  • Gestione objetos en masa, como actualizar o modificar varias cuentas de usuario, buzones o grupos en una sola ejecución, así como exportar e importar datos a través de archivos CSV.
  • Conéctese de forma remota a Exchange Online desde cualquier dispositivo compatible y realice tareas administrativas de forma segura a través de sesiones cifradas.
  • Obtenga informes y auditorías avanzadas. Por ejemplo, genere informes personalizados en formatos CSV, Excel o HTML, y puede audit mailbox access y acciones administrativas con filtros precisos.
  • Acceso a configuraciones ocultas o avanzadas que no están expuestas en la interfaz web de EAC.

Guía rápida de auditoría de buzones de Exchange Online

Aprende más

Requisitos previos para conectarse a Exchange Online PowerShell

Para conectarse a Exchange Online PowerShell, necesita cumplir con requisitos específicos.

Requisitos del sistema

  • Sistema Operativo: Windows 10, Windows 11 o Windows Server 2016/2019/2022
  • Windows PowerShell 5.1 o posterior
  • .NET Framework 4.7.2 or later

Requisitos de red

  • Asegúrese de que se permita el tráfico saliente HTTPS (TCP 443)
  • Debe habilitarse TLS 1.2
  • Acceso a Internet y capacidad para conectarse a outlook.office365.com, login.microsoftonline.com y graph.microsoft.com

Módulo requerido

  • Módulo de gestión de Exchange Online

Requisitos de autenticación

  • Para Microsoft Entra ID, la cuenta debe tener los permisos necesarios, tales como:
  • Administrador Global
  • Administrador de Exchange
  • Las cuentas con MFA activado requieren el módulo de PowerShell de Exchange Online para la autenticación moderna

Permisos requeridos

Su cuenta debería tener los roles RBAC (Control de Acceso Basado en Roles) apropiados:

  • Gestión de la Organización
  • Gestión de destinatarios

Cómo conectarse a Exchange Online PowerShell

Los diferentes métodos para conectarse a Exchange Online PowerShell son:

Conectar-ExchangeOnline Module (Método Moderno)

Puede conectarse a Exchange Online utilizando el Módulo de Administración de Exchange Online (EXO V2). Este método se recomienda para tareas de administración y gestión cotidianas. Admite autenticación moderna (OAuth) y MFA.

Azure Cloud Shell (Conexión basada en navegador)

Este método permite a los administradores usar Exchange Online PowerShell directamente desde el Azure Portal sin requerir instalación local. Exchange Online PowerShell es accesible desde cualquier dispositivo con un navegador, y tiene módulos y herramientas preinstalados. Este método se recomienda para administradores que prefieren gestionar a través del navegador o tienen acceso limitado a herramientas de PowerShell localmente. La ruta de acceso es: Azure Portal > Cloud Shell > PowerShell.

Exchange Online Remote PowerShell (Deprecated)

Este método legado que utiliza Remote PowerShell (protocolo WSMan) para conectarse a Exchange Online PowerShell. Está en desuso y no se recomienda para nuevas implementaciones, pero puede utilizarse para scripts o sistemas antiguos que no admiten el módulo de gestión de Exchange Online más reciente. Este método no admite MFA.

Usando Service Principal (Autenticación basada en certificados)

Este método permite la administración desatendida o basada en scripts a través de Service Principal Accounts y autenticación basada en certificados. Se recomienda para automatización, CI/CD Pipelines y procesos en segundo plano. Como requisito previo, requiere: Azure AD App Registration y configuración de certificado.

Comparación de los Métodos de Conexión

Método

Ideal para

Admite MFA

Admite la automatización

Connect-ExchangeOnline (EXO V2 Module)

Tareas administrativas del día a día

Azure Cloud Shell

Acceso rápido al navegador

No

Remote PowerShell (WSMan)

Scripts heredados

No

Service Principal (Autenticación por Certificado)

Automatización, CI/CD

No

Comprender la autenticación moderna y sus ventajas

La autenticación moderna es un método de Identity Management que utiliza OAuth 2.0 y Active Directory Authentication Library (ADAL) o Microsoft Authentication Library (MSAL) para inicios de sesión seguros. Reemplaza métodos de autenticación tradicionales como la autenticación básica.

La autenticación moderna es el método recomendado y seguro para conectarse a Exchange Online PowerShell ya que ofrece las siguientes ventajas:

  • Mejora la seguridad ya que utiliza OAuth 2.0 para la autenticación basada en tokens en lugar de pasar las credenciales directamente.
  • Permite el uso de MFA, agregando una capa adicional de seguridad.
  • Permite a los administradores aplicar políticas basadas en el cumplimiento del dispositivo, ubicación o nivel de riesgo, lo que ayuda a limitar el acceso a los recursos de Exchange Online según las condiciones definidas.
  • Integración perfecta con Microsoft Entra ID y proveedores de identidad de terceros, con soporte para inicio de sesión único (SSO).

Microsoft está descontinuando la autenticación básica, por lo que la migración a la autenticación moderna es crítica.

Requisitos para conectarse a Exchange Online PowerShell con o sin MFA

Aquí están los requisitos para conectarse a Exchange Online PowerShell con o sin MFA.

Sin MFA (Autenticación Básica – Método Legado Obsoleto)

La cuenta de Microsoft Entra ID no debe tener MFA activadoLa autenticación básica todavía debe estar permitida (si no está bloqueada a nivel de organización)

Con MFA (Autenticación Moderna)

La cuenta de Microsoft Entra ID debe tener MFA configuradoOAuth 2.0 debe ser compatible (predeterminado en Exchange Online)

Guía paso a paso para conectar

Aquí están los pasos breves para conectarse a Exchange Online PowerShell:

  1. Instale el módulo de PowerShell de Exchange Online.
  2. Conéctese a Exchange Online utilizando el cmdlet Connect-ExchangeOnline. Proporcione sus credenciales de administrador de Exchange de Microsoft 365 cuando se le solicite.
  3. Una vez conectado al entorno de Exchange Online, puede utilizar los cmdlets disponibles en el módulo de PowerShell de Exchange Online para gestionar la configuración y los objetos de Exchange Online, como buzones, contactos y calendarios.

Instale el Exchange Online Management Module

El módulo de Exchange Online Management se puede instalar en sistemas Windows, Mac y Linux. Abra PowerShell como administrador y ejecute el siguiente comando para instalar la última versión del módulo de Exchange Online Management:

Install-Module -Name ExchangeOnlineManagement -Force

Ejecute el siguiente cmdlet para verificar que el módulo de Exchange Online Management esté instalado:

Get-Module -ListAvailable -Name ExchangeOnlineManagement

Si se instala correctamente, debería mostrar los detalles del módulo.

El módulo de PowerShell de Exchange Online utiliza autenticación moderna para conectarse a todos los entornos de PowerShell relacionados con Exchange.

Actualice el módulo

Para actualizar el módulo existente de Exchange Online Management, utilice el siguiente cmdlet:

Update-Module ExchangeOnlineManagement

Importe el módulo

Cargue el módulo en su sesión de PowerShell utilizando el siguiente cmdlet:

Import-Module ExchangeOnlineManagement

Establecer Política de Ejecución

Al conectarse a Exchange Online PowerShell, la política de ejecución establecida para PowerShell determina cómo se ejecutan los scripts en su sistema. RemoteSigned es la política recomendada ya que asegura que:

  • Los scripts creados localmente pueden ejecutarse sin requerir una firma digital
  • Los scripts descargados de internet deben estar firmados por un editor de confianza

Utilice el siguiente cmdlet para establecer la política de ejecución en RemoteSigned:

Set-ExecutionPolicy RemoteSigned -Scope CurrentUser

Conectar utilizando autenticación básica (Obsoleto)

Microsoft ha deshabilitado permanentemente la autenticación básica para Exchange Online a partir de octubre de 2022. Ha sido reemplazada por la autenticación moderna (OAuth 2.0).

Conéctese usando autenticación moderna

La autenticación moderna (OAuth 2.0) es el método recomendado y seguro para conectarse a Exchange Online PowerShell. Los diferentes métodos para conectarse son:

Método


Autenticación interactiva (aviso de GUI)

Este es el método de conexión predeterminado para la mayoría de los inquilinos, como los inquilinos comerciales estándar de Microsoft 365. Utilice este cmdlet para conectarse mediante autenticación moderna: Connect-ExchangeOnline -UserPrincipalName admin@yourdomain.com Reemplace admin@yourdomain.com con su cuenta de administrador de Exchange Online. Aparecerá una ventana de inicio de sesión; complete el proceso de inicio de sesión, incluyendo la autenticación multifactor (MFA) si es necesario.

Autenticación de Código de Dispositivo (Para Entornos Sin GUI)

Si trabaja en un entorno sin GUI, utilice el parámetro -Device: Connect-ExchangeOnline -UserPrincipalName admin@yourdomain.com -Device Copie el Código de Dispositivo proporcionado.Abra https://microsoft.com/devicelogin en un navegador.Introduzca el Código de Dispositivo.Autentíquese con su cuenta y complete la MFA (si se requiere).

Conéctese con autenticación basada en certificados (No interactivo)

Para automatización o scripts sin supervisión: Connect-ExchangeOnline -CertificateThumbprint “<CertificateThumbprint>” -AppId “<AppId>” -Organization “<YourTenant>” Reemplace: “<CertificateThumbprint>” con la huella digital de su certificado, “<AppId>” con el ID de la aplicación Microsoft Entra ID y “<YourTenant>” con su dominio (como yourdomain.onmicrosoft.com).

Ejemplos de conexión para diferentes entornos de Exchange Online (GCC, GCC High, DoD)

Diferentes entornos de Exchange Online requieren URIs de conexión específicas y configuraciones cuando se utiliza autenticación moderna. Ejemplos de estos entornos son:

Método

Información de conexión

Microsoft 365 GCC (Government Community Cloud)

Caso de uso: clientes del Gobierno de EE. UU. (GCC) Connect-ExchangeOnline -UserPrincipalName admin@contoso.onmicrosoft.com Reemplace admin@contoso.onmicrosoft.com con su cuenta de administrador de Exchange Online. Aparecerá una ventana de inicio de sesión; complete el proceso de inicio de sesión, incluida la autenticación multifactor (MFA), si se requiere.

Microsoft 365 GCC High

Caso de uso: clientes del Gobierno de EE. UU. con altos requisitos de seguridad Connect-ExchangeOnline -UserPrincipalName admin@yourdomain.com -ExchangeEnvironmentName O365USGovGCCHigh -ExchangeEnvironmentName – Especifica explícitamente el entorno GCC High

Microsoft 365 DoD (Department of Defense)

Caso de uso: Reservado para los inquilinos del Departamento de Defensa de EE. UU. (DoD) Connect-ExchangeOnline -UserPrincipalName admin@yourdomain.com -ExchangeEnvironmentName O365USGovDoD -ExchangeEnvironmentName: Establece explícitamente el entorno al entorno de Office 365 US Government DoD

Usando la Autenticación Multi-Factor

Proceso de conexión paso a paso con MFA habilitado

Conexión con Managed Identities

El uso de Managed Identities para conectarse a Exchange Online PowerShell permite una autenticación segura y sin contraseña en Microsoft Entra.

¿Qué son las Managed Identities?

Las Identidades administradas permiten que los recursos de Microsoft Entra se autentiquen en servicios compatibles sin almacenar credenciales en scripts o código. Exchange Online admite esta característica para scripts desatendidos utilizando Azure Automation o escenarios similares.

Identidades administradas asignadas por el sistema vs. Identidades administradas asignadas por el usuario

Característica

Asignado por el sistema

Asignado por el usuario

Vinculado a un recurso

Vinculado a un único recurso de Microsoft Entra (como VM, Logic App). Se elimina cuando se elimina el recurso.

Puede compartirse entre múltiples recursos

Alcance de la gestión

Gestionado automáticamente por su recurso

Gestionado de manera independiente y reutilizable

Caso de uso

Adecuado para escenarios de un único recurso

Ideal para uso compartido o de múltiples recursos

Conéctese a Exchange Online PowerShell usando Managed Identities

Requisitos previos

  • Asegúrese de que su recurso de Azure (por ejemplo, VM, Function App, App Service) tenga habilitada una identidad administrada asignada por el sistema o asignada por el usuario.
  • Asigne a la Managed Identity el rol necesario de Microsoft Entra ID para Exchange Online. Por ejemplo:
  • Administrador de Exchange
  • Global Reader o Global Administrator (si se necesitan permisos más amplios).
  • Instale e importe el módulo de PowerShell de Exchange Online.

Cómo conectar

Utilice Connect-ExchangeOnline con el parámetro -ManagedIdentity.

  • Ejemplo de una identidad administrada asignada por el sistema:

Connect-ExchangeOnline -ManagedIdentity -Organization <YourDomain>.onmicrosoft.com

  • Ejemplo para una identidad administrada asignada por el usuario:
      # Especifique el Client ID de la Managed Identity asignada al usuario

Connect-ExchangeOnline -ManagedIdentity -Organization <YourDomain>.onmicrosoft.com -ManagedIdentityAccountId <UserAssignedManagedIdentityClientIdValue>
      

Para escenarios desatendidos, como tareas de automatización o tuberías de CI/CD:

  • Almacene el script en una ubicación segura, como Azure Automation, Azure DevOps o una VM con Managed Identity habilitada.
  • Utilice Managed Identities para autenticarse, evitando la necesidad de manejar credenciales explícitamente.

Ejemplo de guion:

      # Conéctese a Exchange Online

Connect-ExchangeOnline -ManagedIdentity

# Ejemplo de comandos de Exchange Online

Get-Mailbox -RecipientTypeDetails UserMailbox | Select-Object DisplayName, PrimarySmtpAddress

# Desconectar la sesión

Disconnect-ExchangeOnline -Confirm:$false
      

Consulte el artículo Use Azure managed identities to connect to Exchange Online PowerShell de Microsoft para obtener información adicional.

Tutorial de Windows PowerShell Scripting (PDF) para Principiantes

Aprende más

Sintaxis y parámetros comunes de conexión

Sintaxis

El cmdlet Connect-ExchangeOnline tiene la siguiente sintaxis:

Connect-ExchangeOnline

[[-ConnectionUri] <String>]

[[-AzureADAuthorizationEndpointUri] <String>]

[[-ExchangeEnvironmentName] <ExchangeEnvironment>]

[[-PSSessionOption] <PSSessionOption>]

[[-DelegatedOrganization] <String>]

[[-Prefix] <String>]

[[-CommandName] <String[]>]

[[-FormatTypeName] <String[]>]

[-AccessToken <String>]

[-AppId <String>]

[-BypassMailboxAnchoring]

[-Certificado <X509Certificate2>]

[-CertificateFilePath <String>]

[-CertificatePassword <SecureString>]

[-CertificateThumbprint <String>]

[-Credential <PSCredential>]

[-Device]

[-EnableErrorReporting]

[-InlineCredential]

[-LoadCmdletHelp]

[-LogDirectoryPath <String>]

[-LogLevel <LogLevel>]

[-ManagedIdentity]

[-ManagedIdentityAccountId <String>]

[-Organization <String>]

[-PageSize <UInt32>]

[-ShowBanner]

[-ShowProgress <Boolean>]

[-SigningCertificate <X509Certificate2>]

[-SkipLoadingCmdletHelp]

[-SkipLoadingFormatData]

[-TrackPerformance <Boolean>]

[-UseMultithreading <Boolean>]

[-UserPrincipalName <String>]

[-UseRPSSession]

[<CommonParameters>]

Parámetros comunes

Algunos parámetros básicos son:

Parámetro

Descripción

-UserPrincipalName

Especifica la cuenta que deseas utilizar para conectarte a Exchange Online PowerShell. Este parámetro te permite omitir el ingreso de un nombre de usuario en el aviso de credenciales de autenticación moderna.

-Credential

Especifica el nombre de usuario y la contraseña que se utilizan para conectarse a Exchange Online PowerShell

-DelegatedOrganization

Especifica la organización del cliente que deseas gestionar al actuar como un administrador delegado

-ConnectionUri

Especifica el punto de conexión de Exchange Online (utilizado en entornos especializados como inquilinos de GCC o China)

-CertificateThumbprint

Se conecta utilizando un certificado en lugar de nombre de usuario/contraseña. Un valor válido es el valor de la huella digital del certificado.

-AppId

Se utiliza con -CertificateThumbprint para especificar un ID de aplicación de Microsoft Entra

-AccessToken

Especifica un token de acceso OAuth 2.0 para autenticación

-Organización

Especifica la organización cuando te conectas utilizando CBA o identidad gestionada

Algunos parámetros opcionales son:

Parámetro

Descripción

-ShowProgress

Especifica si mostrar o ocultar la barra de progreso de los cmdlets importados al conectarse. Los valores válidos son $true y $false.

-SkipLoadingFormatData

Acelera las conexiones al omitir la carga de archivos de formato y tipo de datos

-InlineCredential

Pasa directamente las credenciales en la línea de comandos para evitar solicitudes al conectarse a Exchange Online PowerShell

-LogDirectoryPath

Especifica la ubicación del archivo de registro

-LogLevel

Especifica el nivel de registro. Los valores válidos son Default y All.

-ConnectionTimeout

Especifica el valor de tiempo de espera (en segundos) para el intento de conexión

-Dispositivo

Normalmente se utiliza en computadoras sin navegadores web. No es necesario especificar un valor con este interruptor.

-ManagedIdentity

Especifica que estás utilizando una identidad gestionada para conectar. No necesitas especificar un valor con este interruptor.

Parámetros específicos para conexiones en entornos de alta seguridad:

Para entornos GCC

Parámetro

Descripción

-ConnectionUri

Especifica el punto final para los inquilinos de GCC

-EntraIDAuthorizationEndpointUri

Especifica el punto de conexión de autorización para GCC

-ExchangeEnvironmentName

Especifica explícitamente el entorno GCC High

Para entornos del DoD

Parámetro

Descripción

-ConnectionUri

Puntos al endpoint específico del DoD

-ExchangeEnvironmentName

Establece explícitamente el entorno para DoD

Automatizando conexiones

Autenticación solo para aplicaciones en scripts desatendidos

La autenticación basada en certificados (CBA) o la autenticación solo de aplicaciones admite escenarios de scripts y automatización desatendidos mediante el uso de aplicaciones Microsoft Entra y certificados autofirmados.

La autenticación solo para aplicaciones permite que los servicios, scripts o trabajos en segundo plano accedan de manera segura a las API y recursos sin necesidad de interacción por parte del usuario. Esto es ideal para escenarios de automatización como tareas programadas, sincronización de datos o procesamiento en backend.

Pasos para configurar la autenticación solo para aplicaciones

  1. Vaya a su proveedor de identidad, como Microsoft Entra ID, y registre la aplicación. Luego anote el Client ID, Tenant ID y genere un Client Secret o cargue un certificado.
  2. Asigne los permisos de API necesarios. Debería otorgar permisos de API de Aplicación en lugar de permisos de API Delegados.
  3. Cree y configure un certificado X.509 autofirmado. Esto se utiliza para autenticar su aplicación contra Microsoft Entra ID, cuando solicita el token de acceso solo para la aplicación.
  4. Registre el certificado con su aplicación. Esto le permitirá usar la clave privada (archivo .pfx) o la huella digital para la autenticación.
  5. Para asignar los roles RBAC adecuados a la aplicación, utilice cualquiera de los roles integrados compatibles en Microsoft Entra.

Ahora puede conectarse a Exchange Online PowerShell utilizando los cmdlets proporcionados en la sección Connect Using Modern Authentication.

Consulte el artículo de Microsoft sobre la autenticación solo para aplicaciones en scripts no atendidos en Exchange Online PowerShell y Security & Compliance PowerShell para obtener información adicional.

Ejemplo de script de PowerShell para autenticación desatendida

      $TenantId = “your-tenant-id”

$ClientId = “your-client-id”

$ClientSecret = “your-client-secret”

$Resource = “https://graph.microsoft.com/”

# Obtener token

$Body = @{

grant_type = “client_credentials”

client_id = $ClientId

client_secret = $ClientSecret

scope = “$Resource/.default”

}

$TokenResponse = Invoke-RestMethod -Uri “https://login.microsoftonline.com/$TenantId/oauth2/v2.0/token” -Method Post -Body $Body

$AccessToken = $TokenResponse.access_token

Write-Output “Token de acceso: $AccessToken”
      

Conectando con certificados

El uso de certificados para la automatización proporciona una capa adicional de seguridad en comparación con los secretos de cliente. Los certificados son ideales para la autenticación solo de aplicaciones en scripts o trabajos en segundo plano, ya que evitan almacenar secretos sensibles como texto plano.

Guía paso a paso para el uso de certificados en la automatización

  1. Genere un certificado autofirmado. Puede utilizar herramientas como PowerShell, OpenSSL o cualquier herramienta de gestión de certificados para generarlo.

Aquí le mostramos cómo puede generarlo utilizando PowerShell:

      # Generar un certificado autofirmado

$cert = New-SelfSignedCertificate -DnsName “yourapp.domain.com” -CertStoreLocation “Cert:\CurrentUser\My” -KeyExportPolicy Exportable

# Exporte el certificado y la clave privada como un archivo PFX

$certPath = “C:\path\to\certificate.pfx”

$certPassword = ConvertTo-SecureString -String “yourpassword” -Force -AsPlainText

Export-PfxCertificate -Cert $cert -FilePath $certPath -Password $certPassword
      
  • Registre la aplicación con su proveedor de identidad, como Microsoft Entra ID. También debe subir la clave pública del certificado. Para ello:
  • Vaya a la sección de registro de la aplicación.
  • Agregue una credencial clave utilizando el archivo .crt (clave pública).
  • Tome nota del App ID y del Tenant ID.
  • La aplicación utilizará la clave privada para firmar un JWT para la autenticación solo de la aplicación.

Mejores prácticas de seguridad para conexiones basadas en certificados

  • Almacene los certificados en una ubicación segura, como Azure Key Vault. Evite codificar rutas o claves de forma fija en los scripts.
  • Utilice certificados con un período de validez corto. Rote los certificados antes de que expiren.
  • Revoque los certificados comprometidos o sin usar de inmediato.
  • Limita el acceso a la aplicación y sus recursos utilizando el principle of least privilege, y define ámbitos precisos de API.
  • Registre el uso de certificados para propósitos de auditoría.
  • Monitoree la autenticación de aplicaciones para detectar accesos no autorizados.
  • Utilice cifrado para proteger archivos de clave privada, como .pfx.
  • Proteja las claves privadas con contraseñas fuertes.
  • Requiera MFA para gestionar las configuraciones de aplicaciones. Esto puede requerir la aplicación de MFA para los administradores.

Gestión de sesiones y desconexión

Es crucial gestionar y terminar las sesiones de Exchange Online PowerShell adecuadamente para mantener la seguridad, optimizar el uso de recursos y prevenir el agotamiento de sesiones. Aquí hay algunas prácticas recomendadas que debe seguir.

Mejores prácticas para gestionar sesiones de Exchange Online PowerShell

  • Utilice el Exchange Online Management Module (EXO V2) para una autenticación moderna y una mejor seguridad.
  • Inicie sesión con una cuenta que tenga solo los permisos necesarios para sus tareas, como roles como Exchange Admin y Security Admin.
  • Exchange Online tiene un límite máximo de sesiones (3 sesiones concurrentes por usuario). Asegúrese de cerrar las sesiones después de completar las tareas para evitar alcanzar este límite.
  • Tenga en cuenta el tiempo de espera predeterminado para las sesiones de Exchange Online (generalmente 15 minutos de inactividad). Si los tiempos de espera por inactividad son frecuentes, optimice los scripts para mejorar la eficiencia.
  • Ejecute scripts en una única sesión cuando sea posible. Evite dejar sesiones inactivas durante períodos prolongados.

Mejores prácticas para terminar sesiones de Exchange Online PowerShell

  • Siempre desconecte su sesión al terminar. Simplemente cerrar la ventana de PowerShell sin desconectar puede dejar sesiones huérfanas. Desconecte siempre de manera explícita.
  • El cmdlet Remove-PSSession no limpia completamente las sesiones de Exchange Online. Siempre es preferible:

Disconnect-ExchangeOnline -Confirm:$false

  • Si sospecha que las sesiones huérfanas están consumiendo recursos, termínelas utilizando:

Get-PSSession | Remove-PSSession

  • Si una sesión caduca, reconéctese explícitamente en lugar de asumir que la sesión sigue siendo válida.

Habilitar o Deshabilitar el Acceso a Exchange Online PowerShell para un Usuario

Debe tener privilegios administrativos suficientes, como el rol de Administrador Global o Administrador de Exchange, para habilitar o deshabilitar el acceso de usuario a Exchange Online PowerShell. Además, también se requiere la membresía en los grupos de roles de Organization Management o Recipient Management.

Deshabilitar el acceso a PowerShell solo afecta la capacidad del usuario para conectarse a Exchange Online PowerShell. Esto no afecta su acceso a otros servicios como el Microsoft 365 Admin Center.

Deshabilitar el acceso para un usuario

Cuando deshabilite el acceso a PowerShell, el usuario no podrá conectarse a Exchange Online PowerShell utilizando sus credenciales. Aquí está el cmdlet para deshabilitar el acceso:

Set-User -Identity <UserPrincipalName> -EXOModuleEnabled $false

Habilitar acceso para un usuario

Cuando habilitas el acceso a PowerShell, el usuario puede conectarse a Exchange Online PowerShell. Aquí está el cmdlet para habilitar el acceso:

Set-User -Identity <UserPrincipalName> -EXOModuleEnabled $true

Verifique el estado de acceso de PowerShell de un usuario

Para verificar si un usuario tiene acceso a PowerShell habilitado o deshabilitado, utilice el siguiente comando:

Get-User -Identity “<UserPrincipalName>” | Format-List EXOModuleEnabled

Para obtener todos los usuarios que no tienen acceso a Exchange Online PowerShell, utilice el siguiente cmdlet:

Get-User -ResultSize unlimited -Filter ‘RemotePowerShellEnabled -eq $false’

Para obtener todos los usuarios que tienen acceso a Exchange Online PowerShell, utilice el siguiente cmdlet:

Get-User -ResultSize unlimited -Filter ‘RemotePowerShellEnabled -eq $true’

Desconéctese de Exchange Online

Si está utilizando Exchange Online PowerShell V2 (EXO V2):

Si se conectó con el cmdlet Connect-ExchangeOnline, puede desconectarse utilizando el siguiente comando:

Disconnect-ExchangeOnline -Confirm:$false

El parámetro -Confirm es opcional y se utiliza para suprimir los mensajes de confirmación. Por defecto, algunos cmdlets pueden solicitar confirmación antes de proceder con una acción (como desconectar una sesión).

$false indica que no desea que se le solicite confirmación. Esto permite que el comando se ejecute automáticamente sin preguntarle si está seguro de que desea desconectar.

Si está utilizando el módulo de PowerShell de Exchange Online más antiguo:

Si estaba utilizando la sesión anterior de PowerShell remoto (por ejemplo, conectándose con New-PSSession), puede desconectarse eliminando la sesión de la siguiente manera:

Remove-PSSession $Session

En este caso, $Session es la variable donde almacenaste tu objeto de sesión de PowerShell cuando te conectaste por primera vez.

Problemas de Conexión Comunes y Solución de Problemas

Cuando trabajes con Exchange Online PowerShell, podrías encontrar problemas de conexión. Vamos a echar un vistazo a estos problemas y sus soluciones.

Módulo no instalado o desactualizado

Ves errores como:

  • El término 'Connect-ExchangeOnline' no es reconocido.
  • El módulo 'ExchangeOnlineManagement' no está instalado.

Solución:

El módulo de administración de Exchange Online (EXO V2) debe estar instalado y actualizado. Utilice este cmdlet para verificar que el módulo esté instalado correctamente:

Get-Module -ListAvailable -Name ExchangeOnlineManagement

Credenciales incorrectas o problemas de autenticación

Puede encontrarse con problemas tales como:

  • Hay un error de autenticación
  • Los mensajes de autenticación multifactor están fallando

Solución:

  • Utilice la autenticación moderna con las credenciales correctas.
  • Asegúrese de que su cuenta soporte MFA y de que no esté bloqueado.
  • Elimine cualquier credencial almacenada en caché.
  • Si su cuenta tiene políticas de acceso condicional, verifique que permitan el acceso a Exchange Online.

Agotamiento del límite de sesión

Demasiadas sesiones abiertas impiden que te conectes y podrías recibir un error:

  • Se ha superado el número máximo de sesiones concurrentes.

Solución:

  • Desconectar sesiones inactivas.
  • Asegúrese de desconectarse adecuadamente después de cada sesión.
  • Monitoree sesiones activas.

Proxy o Firewall bloqueando la conexión

La conexión se cuelga o falla debido a una restricción de proxy o firewall, y recibes este error:

  • No se puede conectar al servidor remoto.

Solución:

  • Asegúrese de que la configuración de su proxy esté correctamente configurada:
  • Permita los puntos finales de Exchange Online PowerShell a través del cortafuegos:
  • *.outlook.office365.com
  • *.office365.com
  • *.microsoftonline.com
  • Prue la conectividad con:

Test-NetConnection outlook.office365.com -Port 443

Versión desactualizada de TLS

Puede encontrarse con este error:

  • La conexión subyacente se cerró: Ocurrió un error inesperado en un envío.

Solución:

  • Asegúrese de que su sistema sea compatible con TLS 1.2.
  • Compruebe su versión de .NET (se recomienda la 4.6.2 o posterior).

Permisos faltantes

Recibe errores como:

  • Acceso denegado. No tiene suficientes permisos.

Solución:

  • Su cuenta debe tener asignado el rol de Exchange Administrator o el rol apropiado.

Versión incorrecta de PowerShell

Podrías ver errores de compatibilidad si estás utilizando una versión de PowerShell no compatible.

Solución:

  • Asegúrese de estar utilizando PowerShell 5.1 o superior:
  • Para PowerShell Core (7.x), asegúrese de que el módulo EXO V2 sea compatible.

Bloqueo de cuenta o cuenta deshabilitada

Recibe errores como:

  • Su cuenta ha sido bloqueada o desactivada.

Solución:

  • Verifique el estado de la cuenta en Microsoft 365 Admin Center.
  • Desbloquee la cuenta o restablezca la contraseña si es necesario.

Problemas de resolución de DNS

Recibe el siguiente error:

  • No se pudo resolver el nombre remoto.

Solución:

  • Compruebe la resolución DNS para los puntos finales de Exchange Online.
  • Utilice servidores DNS públicos (por ejemplo, 8.8.8.8 o 1.1.1.1) si falla la resolución de DNS.

Errores relacionados con conflictos de módulos de PowerShell

Los conflictos de módulos en PowerShell pueden causar varios errores, como cmdlets que no se reconocen, funcionalidades superpuestas o incompatibilidades de versión.

Puede obtener errores como:

  • El término ‘<cmdlet>’ no es reconocido.
  • El cmdlet está disponible en varios módulos.
  • Referencia ambigua de cmdlet.

Solución:

  • Compruebe todos los módulos cargados actualmente y sus versiones utilizando este cmdlet:

Get-Module -ListAvailable

  • Si un cmdlet está causando conflicto, averigüe a qué módulo pertenece el cmdlet:

Get-Command <Cmdlet-Name>

  • Importe explícitamente el módulo requerido y fuerce la versión correcta del módulo:

Import-Module -Name ExchangeOnlineManagement -RequiredVersion 2.x.x -Force

  • Si se carga un módulo obsoleto o en conflicto, elimínelo utilizando:

Remove-Module -Name <Module-Name>

  • Si hay varias versiones de un módulo instaladas, desinstale las versiones anteriores utilizando:

Uninstall-Module -Name ExchangeOnlineManagement -RequiredVersion 1.x.x

Errores de conexión de REST API

Para manejar errores de conexión de REST API en PowerShell, necesitas diagnosticar y solucionar problemas relacionados con la autenticación, la conectividad de red o solicitudes mal configuradas.

Problema

Solución

Problemas de autenticación Error: Fallos de autenticación o credenciales inválidas.

Asegúrese de estar utilizando las credenciales correctas y la autenticación moderna (OAuth). Verifique que su cuenta tenga los permisos suficientes (por ejemplo, Administrador de Exchange o un rol similar). Utilice el Modelo de Aplicación Segura o la autenticación basada en certificados si accede de manera programática.

Problemas de Endpoint o Módulo Error: No se puede conectar con el endpoint requerido.

Verifique que está utilizando el módulo correcto de PowerShell V2 para Exchange Online (ExchangeOnlineManagement). Actualice el módulo a la versión más reciente: Compruebe la conectividad al punto final REST de Exchange Online utilizando el siguiente cmdlet. Debería resolverse y ser accesible:
https://outlook.office365.com/powershell-liveid

Conectividad de red Error: Tiempos de espera o errores de conexión rechazada.

Los endpoints requeridos no deben estar bloqueados por cortafuegos o proxies. Estos incluyen: *.office365.com *.microsoftonline.com Pruebe la conectividad a internetSi se encuentra detrás de un proxy corporativo, asegúrese de que el proxy esté configurado correctamente para PowerShell.

Vencimiento del Token Error: Expiración del token de autenticación durante la sesión.

Utilice Connect-ExchangeOnline con una sesión persistente, como se muestra a continuación: Connect-ExchangeOnline -UserPrincipalName <su-email-de-administrador> -ShowProgress $true Refresque su sesión si el token expira utilizando el siguiente cmdlet: Disconnect-ExchangeOnline Connect-ExchangeOnline

Problemas del protocolo TLS/SSL Error: Errores de TLS durante la conexión.

Asegúrese de que TLS 1.2 esté habilitado

Interrupciones del Servicio Error: Servicio no disponible o conectividad intermitente.

Compruebe el Microsoft 365 Service Health Dashboard en busca de cualquier problema en curso.

Errores HTTP Estos errores ocurren cuando el servidor devuelve un código de estado HTTP que indica fallo. Códigos comunes: 400 Solicitud Incorrecta: La solicitud está malformada (por ejemplo, JSON inválido o parámetros)401 No Autorizado: Credenciales de autenticación inválidas o ausentes403 Prohibido: El acceso está denegado aunque la autenticación sea correcta404 No Encontrado: El punto de conexión o recurso solicitado no existe500 Error Interno del Servidor: Un problema en el servidor de la API

Asegúrese de que el contenido y las cabeceras cumplan con los requisitos de la documentación de la API. Verifique las claves de API, tokens u otras credenciales. Asegúrese de que su cuenta tenga derechos de acceso al recurso solicitado. Utilice registros o una herramienta como Postman para verificar los datos brutos de la solicitud/respuesta.

Errores de SSL/TLS Las conexiones seguras (HTTPS) pueden fallar debido a problemas con el certificado.

Asegúrese de que el certificado SSL del servidor sea válido y de confianza. Para pruebas locales, puede omitir la validación SSL, pero evite hacerlo en producción. Asegúrese de que sus bibliotecas de cliente (por ejemplo, Python requests, Node.js https) estén actualizadas para admitir versiones modernas de TLS.

Errores de tiempo de espera Estos ocurren cuando el servidor API no responde dentro del plazo esperado.

Ajuste el parámetro de tiempo de espera en su cliente API para aumentar la configuración de tiempo de espera.Evite enviar cargas útiles excesivamente grandes o consultas lentas.Contacte al proveedor de la API si los tiempos de espera son frecuentes ya que puede haber problemas de carga del servidor.

Límites de Tasa y Cuotas Las API a menudo tienen límites de uso, lo que puede llevar a errores cuando se superan. Error: HTTP 429 Demasiadas Solicitudes

Verifique los límites de frecuencia. Consulte la documentación de la API para conocer los límites de las solicitudes. Implemente el control de tráfico para espaciar las solicitudes y cumplir con los límites de frecuencia. Contacte al proveedor de la API para solicitar cuotas más altas.

Cmdlets de PowerShell clave para Exchange Online

Para obtener una lista de todos los cmdlets de PowerShell de Exchange Online disponibles, utilice el siguiente cmdlet:

Get-command -Module ExchangeOnlineManagement

Aquí hay un resumen rápido de los cmdlets principales de Exchange Online, incluyendo Get-Mailbox, Get-EXOMailboxStatistics y otros, para gestionar buzones, usuarios y sus configuraciones de manera efectiva.

Get-Mailbox

Este cmdlet recupera información sobre buzones en Exchange Online. También puede mostrar buzones específicos, como buzones de usuario, buzones compartidos, etc.

Sintaxis

Get-Mailbox [-Identity] <String> [-RecipientTypeDetails <RecipientTypeDetails>] [otros parámetros]

Ejemplos de uso común

  • Obtenga todos los buzones:

Get-Mailbox -ResultSize Unlimited

  • Obtenga todas las buzones compartidos:

Get-Mailbox -RecipientTypeDetails SharedMailbox

  • Filtrar buzones por dominio:

Get-Mailbox -Filter “EmailAddress -like ‘*@domain.com'”

Get-EXOMailboxStatistics

Este cmdlet recupera estadísticas detalladas sobre buzones en Exchange Online, proporcionando información como el tamaño del buzón, cantidad de elementos y la última hora de inicio de sesión.

Sintaxis

Get-EXOMailboxStatistics [-Identity] <String>

Ejemplos de uso común

  • Obtenga estadísticas del buzón para un usuario:

Get-EXOMailboxStatistics -Identity user@domain.com

  • Recupere los tamaños de todas las bandejas de correo:

Get-EXOMailboxStatistics | Select DisplayName, ItemCount, TotalItemSize

  • Obtenga buzones con tamaños superiores a un umbral específico:

Get-EXOMailboxStatistics | Where-Object { $_.TotalItemSize -gt 10GB }

Get-MailboxStatistics

Este cmdlet es similar a Get-EXOMailboxStatistics pero funciona con Exchange local o entornos híbridos. Proporciona detalles del tamaño del buzón y la cantidad de elementos.

Sintaxis

Get-MailboxStatistics [-Identity] <String>

Ejemplos de uso común

  • Obtenga estadísticas para un usuario específico:

Get-MailboxStatistics -Identity “user@domain.com”

  • Obtenga todos los tamaños de buzón y las últimas horas de inicio de sesión:

Get-MailboxStatistics | Select DisplayName, LastLogonTime, TotalItemSize

Get-MailboxPermission

Este cmdlet recupera los permisos asignados a un buzón de correo, incluyendo el acceso delegado.

Sintaxis

Get-MailboxPermission [-Identity] <String>

Ejemplos de Uso Común

  • Ver todos los permisos para un buzón:

Get-MailboxPermission -Identity user@domain.com

  • Filtrar por permisos no predeterminados:

Get-MailboxPermission -Identity “user@domain.com” | Where-Object { $_.IsInherited -eq $false }

Set-Mailbox

Este cmdlet modifica la configuración del buzón, como los límites de cuota, reenvío y habilitación de características.

Sintaxis

Set-Mailbox [-Identity] <String> [-Parameters]

Common Usage Examples

  • Habilite el reenvío de correo:

Set-Mailbox -Identity “user@domain.com” -ForwardingSMTPAddress “forwardto@domain.com” -DeliverToMailboxAndForward $true

  • Cambiar cuota de buzón:

Set-Mailbox -Identity “user@domain.com” -ProhibitSendQuota 50GB

New-Mailbox

Este cmdlet crea un nuevo buzón de correo para un usuario en Exchange Online. Este cmdlet se puede utilizar para diversos escenarios, incluyendo la creación de buzones de correo para usuarios individuales, buzones compartidos y buzones de recursos como salas o buzones de equipo.

Sintaxis

New-Mailbox -Name <Name> -MicrosoftOnlineServicesID <UserPrincipalName> -Password (ConvertTo-SecureString -String “<Password>” -AsPlainText -Force)

Ejemplos de uso común

  • Cree un buzón de usuario:

New-Mailbox -Name “John Doe” -MicrosoftOnlineServicesID “johndoe@domain.com” -Password (ConvertTo-SecureString -String “P@ssw0rd!” -AsPlainText -Force)

  • Crear un buzón de correo compartido:

New-Mailbox -Shared -Name “Support Team” -MicrosoftOnlineServicesID “support@domain.com”

  • Crear un buzón de sala:

New-Mailbox -Room -Name “Conference Room 1” -MicrosoftOnlineServicesID conference1@domain.com

  • Crear un Buzón Compartido para un Equipo:

New-Mailbox -Shared -Name “HR Team” -MicrosoftOnlineServicesID “hr@domain.com” -Alias “HRTeam”

Remove-Mailbox

Este cmdlet elimina un buzón de Exchange Online. Esta acción se puede aplicar a varios tipos de buzones, incluyendo buzones de usuario, buzones compartidos y buzones de recursos (como buzones de sala o de equipo).

Sintaxis

Remove-Mailbox -Identity <MailboxIdentity>

Ejemplos de uso común

  • Eliminar un buzón de usuario (elimina el buzón de forma suave, permitiendo su recuperación dentro del período de retención):

Remove-Mailbox -Identity “johndoe@domain.com”

  • Eliminar permanentemente un buzón (elimina sin otorgar un período de retención):

Remove-Mailbox -Identity “johndoe@domain.com” -Permanent

  • Eliminar solo un buzón de archivo (deja intacto el buzón principal para el usuario especificado):

Remove-Mailbox -Identity “johndoe@domain.com” -Archive

Get-MailTrafficSummaryReport

Este cmdlet recupera un resumen del tráfico de correo para su organización (disponible en entornos de Microsoft 365).

Sintaxis

Get-MailTrafficSummaryReport [-StartDate] <DateTime> [-EndDate] <DateTime>

Ejemplo de Uso Común

  • Obtenga el tráfico de correo de los últimos 7 días:
      $StartDate = (Get-Date).AddDays(-7)

$EndDate = Get-Date

Get-MailTrafficSummaryReport -StartDate $StartDate -EndDate $EndDate
      

Search-Mailbox

Este cmdlet busca contenido específico en un buzón o en varios buzones.

Sintaxis

Search-Mailbox [-Identity] <String> [-SearchQuery <Query>] [-TargetMailbox <String>]

Ejemplos de uso común

  • Busque correos electrónicos que contengan una palabra clave específica:

Search-Mailbox -Identity “user@domain.com” -SearchQuery “Subject:’Invoice'”

  • Copiar los resultados de búsqueda a otro buzón:

Search-Mailbox -Identity “user@domain.com” -SearchQuery “Keyword” -TargetMailbox “admin@domain.com” -TargetFolder “SearchResults”

Get-MailboxAutoReplyConfiguration

Este cmdlet recupera la configuración de respuesta automática (fuera de la oficina) para un buzón de correo.

Sintaxis

Get-MailboxAutoReplyConfiguration [-Identity] <String>

Ejemplo de uso común

  • Obtenga la configuración de respuesta automática para un usuario específico:

Get-MailboxAutoReplyConfiguration -Identity “user@domain.com”

Get-Recipient

Este cmdlet recupera todos los destinatarios (buzones, grupos, contactos, etc.).

Sintaxis

Get-Recipient [-Filter] <String>

Ejemplos de uso común

  • Obtén todos los destinatarios:

Get-Recipient

  • Filtrar por tipos específicos de destinatarios:

Get-Recipient -RecipientTypeDetails MailUser

Filtros Cmdlet

Utilice filtros para acotar los resultados basados en atributos específicos.

Sintaxis

Los filtros están encerrados en { } y utilizan una estructura de propiedad operador valor:

-Filter {Property -Operator ‘Value’}

Ejemplo

Get-Mailbox -Filter {DisplayName -like “*Test*”}

Operadores Comunes

  • -eq: Igual
  • -ne: No es igual
  • -like: Coincidencia con comodines (* para cero o más caracteres)
  • -notlike: Niega -like
  • -gt: Mayor que
  • -lt: Menos que

Ejemplos de uso de filtros con Cmdlets

  • Recuperar buzones de correo para un dominio específico

Get-Mailbox -Filter {EmailAddresses -like ‘*@example.com’}

  • Encuentre buzones de correo creados después de una fecha específica

Get-Mailbox -Filter {WhenCreated -gt ‘2023-01-01’}

  • Obtener buzones con patrones de nombres para mostrar específicos

Get-Mailbox -Filter {DisplayName -like ‘*Test*’}

  • Obtener buzones deshabilitados

Get-Mailbox -Filter {AccountDisabled -eq $true}

Ejemplos de combinación de múltiples condiciones

Puede combinar filtros utilizando operadores lógicos como -and y -or.

  • Obtener usuarios con UPN específico y nombre para mostrar

Get-Mailbox -Filter {UserPrincipalName -like ‘*@example.com’ -and DisplayName -like ‘*John*’}

  • Encuentre buzones habilitados pero que superen un umbral de tamaño

Get-Mailbox -Filter {AccountDisabled -eq $false -and ProhibitSendQuota -gt 10GB}

Ejemplos de filtrado con Pipeline

Los filtros también pueden combinarse con Where-Object para un filtrado avanzado.

  • Filtrar buzones por atributo personalizado

Get-Mailbox | Where-Object { $_.CustomAttribute1 -eq ‘Value1’ }

  • Obtener buzones de correo activos que iniciaron sesión en los últimos 30 días

Get-MailboxStatistics | Where-Object { $_.LastLogonTime -gt (Get-Date).AddDays(-30) }

Configuraciones avanzadas

  • Utilice Select-Object para refinar la salida y mostrar solo las propiedades relevantes.

Get-Mailbox | Select-Object DisplayName, PrimarySmtpAddress

  • Exporte los resultados a CSV para informes.

Get-Mailbox | Export-Csv -Path “Mailboxes.csv” -NoTypeInformation

  • El límite predeterminado es de 1000 resultados; use -ResultSize Unlimited para obtener todos los elementos.

Migrar a Exchange Online usando PowerShell

Migrar a Exchange Online usando PowerShell implica varios pasos, incluyendo la preparación del entorno local, la configuración de los puntos finales de migración y la gestión del proceso de migración.

Requisitos previos

Antes de realizar la migración, asegúrate de tener:

  • Una suscripción activa de Microsoft 365 o Office 365 con Exchange Online.
  • Credenciales de administrador tanto para su servidor Exchange local como para Exchange Online.
  • El módulo de PowerShell de Exchange Online V2 (EXO V2) está instalado.
  • La configuración de Exchange Online (Hybrid) se establece si se utiliza la migración híbrida.

Migración híbrida (para organizaciones con Exchange local y Exchange Online)

En un entorno híbrido, puedes migrar buzones de correo manteniendo la coexistencia entre los buzones locales y basados en la nube.

  1. Instale y configure el Hybrid Configuration Wizard (HCW).

El Asistente de Configuración Híbrida (HCW) es la herramienta principal para configurar un entorno híbrido de Exchange. Asegura que su servidor Exchange local esté preparado para la coexistencia híbrida con Exchange Online. Puede descargarlo y ejecutarlo desde el Centro de Administración de Exchange (EAC).

  • Prepare el servidor Exchange on-premises:
  • Ejecute el cmdlet Get-ExchangeServer para asegurarse de que se está utilizando la versión correcta.
  • Ejecute el cmdlet New-RemoteMailbox para crear un buzón remoto para los usuarios que están siendo migrados.
  • Inicie una migración creando un lote de migración utilizando el cmdlet New-MigrationBatch:

New-MigrationBatch -Name “MigrationBatch” -SourceEndpoint <OnPremisesExchangeEndpoint> -TargetEndpoint <ExchangeOnlineEndpoint> -MailboxList <MailboxesToMigrate> -AutoStart -AutoComplete

Reemplace los marcadores de posición:

  • <OnPremisesExchangeEndpoint> – El endpoint para su servidor Exchange local
  • <ExchangeOnlineEndpoint> – El punto de conexión para Exchange Online
  • <MailboxesToMigrate> – La lista de buzones de correo a migrar
  • Para monitorear el proceso de migración:

Get-MigrationBatch | Get-MigrationUser

  • Una vez finalizada la migración, puede completarla utilizando:

Set-MigrationBatch -Identity “MigrationBatch” -Complete

Migración de cutover (para entornos pequeños, típicamente menos de 150 buzones)

En la migración de cutover, todas las buzones se migran de Exchange local a Exchange Online en un solo lote.

  1. Utilice el cmdlet New-MigrationEndpoint para crear un punto de conexión para el servidor Exchange local:

New-MigrationEndpoint -Name “CutoverEndpoint” -ExchangeServer “<OnPremisesExchangeServer>” -Type “ExchangeRemoteMove”

  • Utilice el cmdlet New-MigrationBatch para crear un lote de migración para todos los buzones:

New-MigrationBatch -Name “CutoverMigrationBatch” -SourceEndpoint “CutoverEndpoint” -MailboxList “user1@example.com”, “user2@example.com” -TargetDeliveryDomain “<ExchangeOnlineDomain>” -AutoStart -AutoComplete

  • Utilice el cmdlet Get-MigrationBatch para monitorear la migración:

Get-MigrationBatch “CutoverMigrationBatch” | Get-MigrationUser

  • Después de que la migración esté completa, puede finalizarla utilizando el cmdlet Set-MigrationBatch:

Set-MigrationBatch -Identity “CutoverMigrationBatch” -Complete

Migración por etapas (para entornos de tamaño mediano)

En la migración por etapas, los buzones de correo se migran en fases (típicamente en lotes) desde Exchange local a Exchange Online.

  1. Cree un endpoint para el Exchange local:

New-MigrationEndpoint -Name “StagedEndpoint” -ExchangeServer “<OnPremisesExchangeServer>” -Type “ExchangeRemoteMove”

  • Para migrar buzones por etapas, cree un lote de migración utilizando el cmdlet New-MigrationBatch:

New-MigrationBatch -Name “StagedMigrationBatch” -SourceEndpoint “StagedEndpoint” -MailboxList “user1@example.com”, “user2@example.com” -TargetDeliveryDomain “<ExchangeOnlineDomain>” -AutoStart -AutoComplete

  • Monitoree la migración utilizando:

Get-MigrationBatch “StagedMigrationBatch” | Get-MigrationUser

  • Una vez que la migración esté completa, finalícela:

Set-MigrationBatch -Identity “StagedMigrationBatch” -Complete

Mejores prácticas de seguridad

Asegure conexiones seguras

Utilice métodos de autenticación seguros

Aproveche la autenticación moderna con OAuth en lugar de la autenticación básica. También debe habilitar la autenticación multifactor (MFA) para todas las cuentas de usuario que accedan a Exchange Online.

Utilice Políticas de Acceso Condicional

Configure el Acceso Condicional en Microsoft Entra para hacer cumplir restricciones como ubicación, cumplimiento del dispositivo y niveles de riesgo del usuario. Asegúrese de bloquear o limitar el acceso desde ubicaciones desconocidas o riesgosas.

Limitar el acceso a PowerShell

Utilice el Control de Acceso Basado en Roles (RBAC) para limitar el acceso a PowerShell solo a aquellos usuarios que lo necesiten. Como medida de precaución adicional, deshabilite PowerShell remoto para las cuentas que no requieran acceso administrativo.

Aplicar cifrado TLS

Asegúrese de que todas las conexiones a Exchange Online usen TLS 1.2 o superior. También debe auditar regularmente los sistemas para confirmar el cumplimiento con los protocolos de cifrado modernos.

Utilice Privileged Access Workstations (PAWs)

Restrinja las tareas administrativas a estaciones de trabajo seguras y aisladas para reducir la exposición a malware o ataques.

Utilice Secure Application Tokens

Para scripts no atendidos, reemplace las credenciales de usuario con registros de aplicaciones seguras en Microsoft Entra ID.

Gestione los permisos de usuario y el control de acceso en Exchange Online

Implemente el Control de Acceso Basado en Roles (RBAC)

Asigne roles predefinidos a los usuarios basándose en el principio de privilegio mínimo. Solo asigne roles amplios como Administrador Global cuando sea absolutamente necesario.

Monitoree y revise los permisos regularmente

Realice auditorías periódicas de permisos y elimine el acceso innecesario. Como práctica habitual, utilice los informes del Microsoft 365 Security & Compliance Center para revisar los registros de acceso.

Separe los roles administrativos

Utilice cuentas separadas para tareas administrativas y actividades diarias de usuario. Aún mejor, asigne diferentes roles para distintas funciones administrativas como la gestión de buzones y la gestión de cumplimiento.

Utilice el acceso Just-in-Time (JIT)

Implemente políticas de JIT access utilizando Microsoft Entra ID Privileged Identity Management (PIM) para proporcionar permisos elevados temporalmente.

Habilitar la Auditoría de Buzones

Habilite la auditoría para todas las bandejas de entrada para rastrear cambios y detectar accesos no autorizados.

Recomendaciones para usar PowerShell de manera segura en entornos de producción

Asegure sus scripts

Evite codificar credenciales de forma fija; utilice mecanismos de almacenamiento seguros como Azure Key Vault o Windows Credential Manager. También use scripts parametrizados y manejo seguro de entradas para evitar vulnerabilidades de inyección.

Monitorear y registrar la actividad de PowerShell

Habilite el registro de PowerShell (módulo, bloque de scripts y registros de transcripción). También puede integrar el registro con un sistema SIEM para monitoreo en tiempo real.

Utilice scripts firmados

Firme scripts de PowerShell con un certificado de confianza para asegurar la integridad. Para soportarlo, configure la política de ejecución de PowerShell en AllSigned ya que solo permite scripts firmados.

Ejecutar PowerShell con el menor privilegio

Evite usar cuentas con permisos elevados innecesariamente. En su lugar, utilice permisos granulares para tareas específicas.

Mantenga PowerShell y los módulos actualizados

Actualice regularmente PowerShell a la última versión para abordar las vulnerabilidades de seguridad. No solo eso, actualice también el módulo de Exchange Online Management para aprovechar las últimas características y correcciones.

Limitar el acceso a la red

Restrinja el acceso a los puntos finales de Exchange Online a direcciones IP conocidas utilizando reglas de firewall o Ubicaciones con nombre de Microsoft Entra ID.

Cifrar datos sensibles

Utilice SecureString u otros métodos de cifrado para almacenar y transmitir datos sensibles de manera segura.

Netwrix Auditor for Exchange

Conclusión

PowerShell para Exchange Online ofrece capacidades poderosas para gestionar y automatizar tareas administrativas, permitiendo a los administradores manejar operaciones complejas como actualizaciones masivas de usuarios, informes y cambios de configuración. Al adoptar autenticación moderna, incluyendo OAuth y MFA, las organizaciones pueden asegurar el acceso a Exchange Online. La automatización a través de PowerShell minimiza el esfuerzo manual, reduce los errores humanos y mejora la consistencia operacional general y la escalabilidad.

Para configuraciones avanzadas y un aprendizaje más profundo, visite la documentación oficial de Microsoft, los módulos de entrenamiento de PowerShell y los foros de la comunidad.

Documentación de Microsoft

Preguntas frecuentes

¿Cómo conectarse a Exchange Online PowerShell paso a paso?

Conectar con Exchange Online PowerShell es sencillo cuando sigues la secuencia correcta. Primero, asegúrate de tener instalado el módulo de Exchange Online PowerShell ejecutando Install-Module -Name ExchangeOnlineManagement en una sesión de PowerShell elevada. Una vez instalado, utiliza Connect-ExchangeOnline -UserPrincipalName tu-admin@dominio.com para establecer la conexión. Se te solicitará la autenticación de múltiples factores si está habilitada en tu cuenta. Después de una autenticación exitosa, verifica tu conexión con Get-Mailbox -ResultSize 1 para probar la funcionalidad básica. Recuerda siempre desconectarte usando Disconnect-ExchangeOnline cuando hayas terminado para mantener las mejores prácticas de seguridad.

Acceso denegado a Exchange Online PowerShell – ¿cómo solucionarlo?

Los errores de acceso denegado generalmente se deben a permisos insuficientes o problemas de autenticación. Comience verificando que su cuenta tenga los roles administrativos necesarios de Exchange Online – como mínimo, necesita permisos de Exchange Administrator o Global Administrator. Si los roles son correctos, verifique si su organización utiliza políticas de Conditional Access que podrían estar bloqueando las conexiones de PowerShell. Elimine cualquier credencial almacenada usando Remove-StoredCredential y vuelva a intentar la conexión. Para problemas persistentes, asegúrese de estar utilizando la última versión del módulo ExchangeOnlineManagement, ya que las versiones anteriores pueden tener problemas de compatibilidad con los requisitos de autenticación moderna.

¿Cuáles son las soluciones comunes cuando no se puede conectar a Exchange Online PowerShell?

Los fallos de conexión suelen caer en tres categorías: problemas de autenticación, problemas de red o conflictos de módulos. Primero, verifica que estás utilizando la sintaxis correcta: Connect-ExchangeOnline -UserPrincipalName en lugar de métodos de conexión obsoletos. Revisa tu conectividad de red y la configuración del firewall – Exchange Online requiere acceso a ciertos puntos finales de Microsoft. Si estás detrás de un proxy corporativo, configura PowerShell para usar la configuración de tu proxy. Los conflictos de módulos pueden ocurrir cuando tienes instalados simultáneamente los antiguos módulos de MSOnline y el nuevo módulo de ExchangeOnlineManagement. Desinstala los módulos antiguos y quédate con el módulo unificado de ExchangeOnlineManagement para la experiencia más limpia.

Cómo instalar el módulo de PowerShell de Exchange Online?

Instalar el módulo de Exchange Online PowerShell requiere solo un comando, pero es importante tener en cuenta los requisitos previos. Ejecute PowerShell como administrador y ejecute Install-Module -Name ExchangeOnlineManagement -Force -AllowClobber. El parámetro -Force asegura que obtenga la versión más reciente, mientras que -AllowClobber maneja cualquier conflicto con cmdlets existentes. Si encuentra errores de política de ejecución, establezca temporalmente la política usando Set-ExecutionPolicy RemoteSigned -Scope CurrentUser. Para entornos donde no se pueden modificar las políticas de ejecución, descargue el módulo manualmente desde PowerShell Gallery e instálelo utilizando el método sin conexión. Siempre verifique la instalación ejecutando Get-Module ExchangeOnlineManagement -ListAvailable para confirmar que el módulo está correctamente instalado.

¿Cómo conectarse a Exchange Online PowerShell con MFA?

La autenticación multifactor con Exchange Online PowerShell es sencilla cuando está configurada correctamente. El moderno cmdlet Connect-ExchangeOnline maneja MFA automáticamente – simplemente use Connect-ExchangeOnline -UserPrincipalName su-admin@dominio.com y será redirigido a una ventana del navegador para completar MFA. Para scripts no atendidos o automatización, configure la autenticación basada en certificados o use un principal de servicio con Connect-ExchangeOnline -CertificateThumbprint o Connect-ExchangeOnline -AppId. Evite usar la autenticación básica o contraseñas de aplicación, ya que Microsoft está eliminando estos métodos heredados. La autenticación moderna no es solo más segura – también es más confiable y ofrece una mejor integración con las políticas de Identity Management de su organización.

Compartir en

Aprende más

Acerca del autor

Asset Not Found

Jonathan Blackwell

Jefe de Desarrollo de Software

Desde 2012, Jonathan Blackwell, un ingeniero e innovador, ha proporcionado liderazgo en ingeniería que ha colocado a Netwrix GroupID a la vanguardia de la gestión de grupos y usuarios para entornos de Active Directory y Azure AD. Su experiencia en desarrollo, marketing y ventas permite a Jonathan comprender completamente el mercado de Identity Management y la forma de pensar de los compradores.