Nota:
El acceso a esta página requiere autorización. Puede intentar iniciar sesión o cambiar directorios.
El acceso a esta página requiere autorización. Puede intentar cambiar los directorios.
En varias conexiones a Exchange Online o a PowerShell de seguridad & cumplimiento en la misma ventana, se usa el cmdlet Invoke-Command para ejecutar scripts o comandos en una sesión de PowerShell remota específica. Pero el cmdlet Invoke-Command no funciona en conexiones de API de REST a Exchange Online o a Security & Compliance PowerShell.
En este artículo se ofrecen alternativas a la API de REST para escenarios que usan comandos Invoke-Command .
Escenario 1: Ejecutar cmdlets de Exchange Online
En este ejemplo se busca la identidad de cualquier otro usuario ($Us = $User.Identity).
Sugerencia
Se requerían otros comandos para obtener los valores de $User y, por lo tanto $Us, . Esos comandos no son importantes. El enfoque general que se está utilizando es lo importante.
En una sesión remota de PowerShell: Use el cmdlet Get-PSSession para almacenar los detalles de la sesión remota de PowerShell en la variable denominada
$Session, y luego ejecute el siguiente comando:Invoke-Command -Session $Session -ScriptBlock {Get-User $Using:Us | Select-Object DistinguishedName, ExternalDirectoryObjectId} -ErrorAction SilentlyContinueEn una sesión de API de REST: Ejecute el siguiente comando:
Get-User $Us | Format-List DistinguishedName, ExternalDirectoryObjectId
En este ejemplo se busca la identidad de un miembro del grupo:
En una sesión remota de PowerShell: Use el cmdlet Get-PSSession para almacenar los detalles de la sesión remota de PowerShell en la variable denominada
$Session, y luego ejecute el siguiente comando:Invoke-Command -Session $Session -ScriptBlock {Get-Recipient -Filter "Members -eq '$($User.DistinguishedName)'" -RecipientTypeDetails MailUniversalDistributionGroup | Select-Object DisplayName, ExternalDirectoryObjectId, RecipientTypeDetails} -ErrorAction SilentlyContinue -HideComputerNameEn una sesión de API de REST: Ejecute el siguiente comando:
Get-Recipient -Filter "Members -eq '$($User.DistinguishedName)'" -RecipientTypeDetails MailUniversalDistributionGroup | Format-List DisplayName, ExternalDirectoryObjectId, RecipientTypeDetails
Escenario 2: Ejecutar cmdlets de Exchange Online y expandir propiedades específicas
En este ejemplo se buscan todos los buzones en los que se establece el permiso GrantSendOnBehalfTo y, a continuación, se devuelven los usuarios que tienen el permiso para el buzón.
En una sesión remota de PowerShell: Use el cmdlet Get-PSSession para almacenar los detalles de la sesión remota de PowerShell en la variable denominada
$Session, y luego ejecute el siguiente comando:Invoke-Command -Session $Session -ScriptBlock {Get-Mailbox -Filter "GrantSendOnBehalfTo -ne `$null" -ErrorAction SilentlyContinue | Select-Object ExternalDirectoryObjectId, GrantSendOnBehalfTo -ExpandProperty GrantSendOnBehalfTo}En una sesión de API de REST: Ejecute el siguiente comando:
$mailboxes = Get-Mailbox -Filter "GrantSendOnBehalfTo -ne `$null" foreach ($mailbox in $mailboxes) { $users = $mailbox | Select-Object GrantSendOnBehalfTo -ExpandProperty GrantSendOnBehalfTo | Get-User $users | Select-Object Name, Guid }
Escenario 3: Ejecutar cmdlets de Exchange Online en una sesión de PowerShell específica cuando hay varias sesiones presentes
En este ejemplo se muestra cómo crear dos sesiones de PowerShell en la misma ventana y ejecutar el cmdlet Get-Mailbox en cada sesión.
En una sesión remota de PowerShell:
Use el cmdlet Get-PSSession para almacenar los detalles de la primera sesión remota de PowerShell en la variable denominada
$Session1.Use el cmdlet Get-PSSession para almacenar los detalles de la segunda sesión remota de PowerShell en la variable denominada
$Session2.Ejecute los comandos siguientes:
Invoke-Command -Session $Session1 -ScriptBlock {Get-Mailbox -ResultSize 1} Invoke-Command -Session $Session2 -ScriptBlock {Get-Mailbox -ResultSize 1}
En una sesión de API de REST:
En el primer comando Connect-ExchangeOnline , use el parámetro Prefijo con el valor C1.
Almacene los primeros detalles de conexión de la API de REST en la variable cuyo nombre se debe
$ConnectionInfo1al ejecutar el siguiente comando:$ConnectionInfo1 = Get-ConnectionInformation | Where-Object { $_.ModulePrefix -eq "C1"}En el segundo comando Connect-ExchangeOnline , use el parámetro Prefijo con el valor C2.
Almacene los segundos detalles de conexión de la API de REST en la variable cuyo nombre se debe
$ConnectionInfo2mediante la ejecución del siguiente comando:$ConnectionInfo1 = Get-ConnectionInformation | Where-Object { $_.ModulePrefix -eq "C2"}Ahora puede ejecutar comandos en cualquier sesión. Por ejemplo:
$CommandStr1 = "Get-$($ConnectionInfo1.ModulePrefix)Mailbox -ResultSize 10" Invoke-Expression $CommandStr1O bien
$CommandStr2 = "Get-$($ConnectionInfo2.ModulePrefix)Mailbox -ResultSize 10" Invoke-Expression $CommandStr2