Búsqueda de sitios web

Conéctese a Exchange Online con PowerShell: el mejor método


Algunas configuraciones en Exchange Online solo se pueden cambiar con PowerShell. Pero, ¿cómo se conecta a Exchange Online con PowerShell? Especialmente cuando usa MFA o desea ejecutar su script automáticamente con una programación o Azure Runbook.

PowerShell también es una excelente manera de realizar muchas de las tareas diarias en Exchange Online, como cambiar la configuración del buzón, agregar un nuevo buzón o recuperar información del mismo.

En este artículo, veremos cómo conectarse a Exchange Online en PowerShell, usar el módulo en un Runbook de Azure y más.

Instalar el módulo Exchange Online

Necesitamos instalar el módulo EXO V3 en PowerShell antes de poder conectarnos a Exchange Online. Para instalar el módulo PowerShell, abriremos PowerShell en modo elevado (administrador):

  1. Abra PowerShell en modo elevado
    Presione la tecla Windows + X y elijaWindows PowerShell (admin)
  2. Instalar el módulo EXO V3
    Escriba el siguiente comando para instalar el módulo de administración de Exchange Online:
# Add -Force to it when you need to update EXO V3.
Install-Module -Name ExchangeOnlineManagement -Force
  1. Presione Y dos veces
    Si no tiene NuGet instalado, primero se le pedirá que instale PowerShellGet. Simplemente presione Y. Presione Y nuevamente para instalar el módulo Exchange Online desde el repositorio que no es de confianza.

Conéctese a Exchange Online con PowerShell

Para conectarse a Exchange Online tiene un par de opciones. Si solo ingresa el comando Connect-ExchangeOnline, se le pedirá que ingrese o seleccione su cuenta de Microsoft 365. El último módulo, v3, es compatible con MFA, por lo que puede autenticarse con una cuenta habilitada para MFA.

Personalmente, prefiero especificar la cuenta que quiero usar para la conexión, puedes hacerlo usando el parámetro UserPrincipalName:

Connect-ExchangeOnline -UserPrincipalName john@contoso.com

Después de conectarse a Exchange Online, obtendrá de forma predeterminada información sobre el módulo EXO. Podemos ocultar el banner usando el parámetro -ShowBanner:$false

Connect-ExchangeOnline -UserPrincipalName john@contoso.com -ShowBanner:$false

El nuevo módulo EXO V3 también admite la conexión con otro inquilino. Si es un socio de Microsoft o administra varios inquilinos, puede conectarse a otro inquilino agregando el parámetro -DelgatedOrganization :

Connect-ExchangeOnline -UserPrincipalName john@contoso.com -DelegatedOrganization contoso.onmicrosoft.com

Verifique automáticamente si el módulo EXO está instalado

¿Vas a utilizar el módulo Exchange Online en un script? Luego asegúrese de verificar automáticamente si el módulo está instalado antes de intentar conectarse.

Usando un solo cmdlet, podemos enumerar todos los módulos instalados en PowerShell. Puede evitar errores innecesarios verificando que el módulo ExchangeOnlineManagement esté disponible.

if ($null -ne (Get-Module -ListAvailable -Name ExchangeOnlineManagement)){
 # Your script goes here
}

El cmd anterior debería devolver una lista de los módulos de Exchange Online instalados. Si el resultado está vacío (nulo), entonces sabemos que el módulo no está instalado.

Actualizar el módulo PowerShell de Exchange Online

Los módulos de PowerShell se actualizan con frecuencia, incluido el módulo Exchange Online. La última versión EXO v3 viene con un par de mejoras que hacen que valga la pena actualizar su módulo PowerShell.

  • Mejor rendimiento : los nuevos cmdlets EXO están basados en API REST
  • Más seguro: V3 utiliza autenticación moderna
  • Más confiable
  • Autenticación basada en certificados
  • UseRPSSession Switch: proporciona acceso a todos los cmdlets remotos de PowerShell existentes.

Para actualizar el módulo Exchange Online PowerShell podemos usar el siguiente comando en una ventana elevada de PowerShell:

Update-Module -Name ExchangeOnlineManagement

Verifique la actualización con:

Get-Module ExchangeOnlineManagement

Para beneficiarse de las nuevas funciones, asegúrese de actualizar sus cmdlets Get-* a sus homólogos Get-EXO*. Puede encontrar una lista actualizada de los nuevos cmdlets en la documentación.

Conexión a la función Exchange Online para PowerShell

La función completa a continuación se puede utilizar en scripts para conectarse a Exchange Online. Esta función comprueba si el módulo Exchange Online está instalado y cuando ofrece la opción de instalarlo automáticamente.

También verifica si existen conexiones de Exchange Online en PowerShell, evitando múltiples conexiones desde la misma sesión.

Function ConnectTo-EXO {
  <#
    .SYNOPSIS
        Connects to EXO when no connection exists. Checks for EXO v3 module
  #>
  param(
    [Parameter(
      Mandatory = $true
    )]
    [string]$adminUPN
  )
  
  process {
    # Check if EXO is installed and connect if no connection exists
    if ($null -eq (Get-Module -ListAvailable -Name ExchangeOnlineManagement))
    {
      Write-Host "Exchange Online PowerShell v3 module is requied, do you want to install it?" -ForegroundColor Yellow
      
      $install = Read-Host Do you want to install module? [Y] Yes [N] No 
      if($install -match "[yY]") { 
        Write-Host "Installing Exchange Online PowerShell v3 module" -ForegroundColor Cyan
        Install-Module ExchangeOnlineManagement -Repository PSGallery -AllowClobber -Force
      }else{
	      Write-Error "Please install EXO v3 module."
      }
    }

    if ($null -ne (Get-Module -ListAvailable -Name ExchangeOnlineManagement)) {
      # Check which version of Exchange Online is installed
      if (Get-Module -ListAvailable -Name ExchangeOnlineManagement | Where-Object {$_.version -like "3.*"} ) {
        # Check if there is a active EXO sessions
        if ((Get-ConnectionInformation).tokenStatus -ne 'Active') {
          write-host 'Connecting to Exchange Online' -ForegroundColor Cyan
          Connect-ExchangeOnline -UserPrincipalName $adminUPN
        }
      }else{
        # Check if there is a active EXO sessions
        $psSessions = Get-PSSession | Select-Object -Property State, Name
        If (((@($psSessions) -like '@{State=Opened; Name=ExchangeOnlineInternalSession*').Count -gt 0) -ne $true) {
          write-host 'Connecting to Exchange Online' -ForegroundColor Cyan
          Connect-ExchangeOnline -UserPrincipalName $adminUPN
        }
      }
    }else{
      Write-Error "Please install EXO v3 module."
    }
  }
}

Conéctese a Exchange Online como administrador delegado (socio)

Cuando administra varios inquilinos, es posible que también necesite conectarse a Exchange Online. En lugar de utilizar un inicio de sesión de administrador dedicado del inquilino del cliente, también puede conectarse a Exchange Online como administrador delegado.

De esta manera, puede utilizar sus propias credenciales para autenticarse. Para hacer esto necesitarás usar el parámetro -DelegatedOrganization.

# Replace stonegrovebank.onmicrosoft.com with the organization that you want to manage
Connect-ExchangeOnline -DelegatedOrganization stonegrovebank.onmicrosoft.com

# Optional, you can specify your username as well
Connect-ExchangeOnline -UserPrincipalName admin@contoso.com -DelegatedOrganization stonegrovebank.onmicrosoft.com

Ahora puede administrar todos los buzones de correo del inquilino asociado.

Conexión de Exchange Online a PowerShell sin autenticación moderna

Puede utilizar el siguiente método para conectarse a Exchange Online en PowerShell si su cuenta aún no admite la autenticación moderna:

$cred = Get-Credential

Connect-ExchangeOnline -Credential $cred -ShowProgress $true

Compruebe si Exchange Online está conectado

Es una buena idea comprobar si ya existe una conexión cuando se utiliza el módulo Exchange Online en scripts. Ten en cuenta que sólo puedes tener 5 conexiones simultáneas a Exchange Online. Y probablemente no quieras iniciar sesión si no es necesario.

Podemos usar el cmdlet Get-ConnectionInformation desde EXO v3. Si está utilizando una versión anterior de Exchange Online, deberá utilizar Get-PSSession.

Con el siguiente fragmento puede comprobar si hay una sesión activa de ExchangeOnline tanto para la V3 como para las versiones anteriores. Primero verificamos si el módulo ExchangeOnline está instalado y luego si la versión 3.x está instalada, no. Luego, dependiendo de la versión, comprobamos las conexiones existentes.

if ($null -ne (Get-Module -ListAvailable -Name ExchangeOnlineManagement)) {
      # Check which version of Exchange Online is installed
      if (Get-Module -ListAvailable -Name ExchangeOnlineManagement | Where-Object {$_.version -like "3.*"} ) {
        # Check if there is a active EXO sessions
        if ((Get-ConnectionInformation).tokenStatus -ne 'Active') {
          write-host 'Connecting to Exchange Online' -ForegroundColor Cyan
          Connect-ExchangeOnline -UserPrincipalName $adminUPN
        }
      }else{
        # Check if there is a active EXO sessions
        $psSessions = Get-PSSession | Select-Object -Property State, Name
        If (((@($psSessions) -like '@{State=Opened; Name=ExchangeOnlineInternalSession*').Count -gt 0) -ne $true) {
          write-host 'Connecting to Exchange Online' -ForegroundColor Cyan
          Connect-ExchangeOnline -UserPrincipalName $adminUPN
        }
      }
    }

Obtener información del buzón

Con el nuevo módulo EXO V3 ahora puede obtener fácilmente los detalles del buzón con la siguiente abreviatura:

# Old way:
Get-ExoMailbox -identity johndoe@lazyadmin.nl

# With the EXO V2 module you can write the following shorthand
Get-ExoMailbox johndoe

Desconectando tus sesiones

Asegúrese siempre de desconectar su sesión de Exchange Online antes de cerrar la ventana de PowerShell. Si no cierra la sesión, puede terminar usando las 5 conexiones remotas de PowerShell a Exchange Online. Si eso sucede, deberá esperar a que caduquen las sesiones antes de poder volver a conectarse.

Disconnect-ExchangeOnline

Preguntas frecuentes

Si recibe el error “Los archivos no se pueden cargar porque la ejecución de scripts está deshabilitada en este sistema. Proporcionar un certificado válido con el que firmar los expedientes.” entonces olvidó configurar la política de ejecución.

Ejecute el siguiente cmd en una ventana elevada de PowerShell:
Set-ExecutionPolicy RemoteSigned

Está intentando conectarse a Exchange Online con una cuenta habilitada para MFA mientras utiliza la opción de autenticación básica.

Asegúrese de instalar el último módulo de Exchange Online, EXO V3, como se explica al principio del artículo. .

Ha utilizado las 5 conexiones disponibles para Exchange Online. Asegúrese de desconectar sus sesiones de PowerShell.

Para cerrar las sesiones actuales, debe ejecutar el siguiente cmd:

Get-PSSession | Eliminar-PSSession

Para conectarse a Exchange Online necesitará usar una cuenta que sea administrador global en Office 365. La cuenta con la que se está conectando no tiene los permisos correctos.

Concluyendo

El nuevo módulo Exchange Online es realmente potente y facilita mucho el trabajo con Exchange Online. Espero que este artículo te haya ayudado a empezar. Si tiene alguna pregunta, simplemente deje un comentario a continuación.

También te pueden interesar los siguientes artículos:

  • Habilitar direcciones de Office 365 Plus
  • Encuentre todas las direcciones de correo electrónico con PowerShell
  • Conecte PowerShell a Office 365

Artículos relacionados