Soluções alternativas para cenários de Invoke-Command em conexões de API REST
Em várias conexões com o Exchange Online ou o Security & Compliance PowerShell na mesma janela, você usa o cmdlet Invoke-Command para executar scripts ou comandos em uma sessão remota específica do PowerShell. Mas o cmdlet Invoke-Command não funciona em conexões de API REST para Exchange Online ou Segurança & Conformidade do PowerShell.
Este artigo oferece alternativas de API REST para cenários que usam comandos Invoke-Command .
Cenário 1: executar cmdlets Exchange Online
Este exemplo localiza a identidade de qualquer outro usuário ($Us = $User.Identity
).
Dica
Outros comandos foram necessários para obter os valores de $User
e, portanto, $Us
. Esses comandos não são importantes. A abordagem geral que está sendo usada é o que é importante.
Em uma sessão remota do PowerShell: use o cmdlet Get-PSSession para armazenar os detalhes remotos da sessão do PowerShell na variável chamada
$Session
, e execute o seguinte comando:Invoke-Command -Session $Session -ScriptBlock {Get-User $Using:Us | Select-Object DistinguishedName, ExternalDirectoryObjectId} -ErrorAction SilentlyContinue
Em uma sessão de API REST: execute o seguinte comando:
Get-User $Us | Format-List DistinguishedName, ExternalDirectoryObjectId
Este exemplo localiza a identidade de um membro do grupo:
Em uma sessão remota do PowerShell: use o cmdlet Get-PSSession para armazenar os detalhes remotos da sessão do PowerShell na variável chamada
$Session
, e execute o seguinte comando:Invoke-Command -Session $Session -ScriptBlock {Get-Recipient -Filter "Members -eq '$($User.DistinguishedName)'" -RecipientTypeDetails MailUniversalDistributionGroup | Select-Object DisplayName, ExternalDirectoryObjectId, RecipientTypeDetails} -ErrorAction SilentlyContinue -HideComputerName
Em uma sessão de API REST: execute o seguinte comando:
Get-Recipient -Filter "Members -eq '$($User.DistinguishedName)'" -RecipientTypeDetails MailUniversalDistributionGroup | Format-List DisplayName, ExternalDirectoryObjectId, RecipientTypeDetails
Cenário 2: executar cmdlets Exchange Online e expandir propriedades específicas
Este exemplo localiza todas as caixas de correio em que a permissão GrantSendOnBehalfTo é definida e retorna os usuários que têm a permissão na caixa de correio.
Em uma sessão remota do PowerShell: use o cmdlet Get-PSSession para armazenar os detalhes remotos da sessão do PowerShell na variável chamada
$Session
, e execute o seguinte comando:Invoke-Command -Session $Session -ScriptBlock {Get-Mailbox -Filter "GrantSendOnBehalfTo -ne `$null" -ErrorAction SilentlyContinue | Select-Object ExternalDirectoryObjectId, GrantSendOnBehalfTo -ExpandProperty GrantSendOnBehalfTo}
Em uma sessão de API REST: execute o seguinte 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 }
Cenário 3: executar cmdlets Exchange Online em uma sessão específica do PowerShell quando várias sessões estiverem presentes
Este exemplo mostra como criar duas sessões do PowerShell na mesma janela e executar o cmdlet Get-Mailbox em cada sessão.
Em uma sessão remota do PowerShell:
Use o cmdlet Get-PSSession para armazenar os primeiros detalhes remotos da sessão do PowerShell na variável chamada
$Session1
.Use o cmdlet Get-PSSession para armazenar os detalhes da segunda sessão remota do PowerShell na variável chamada
$Session2
.Execute os seguintes comandos:
Invoke-Command -Session $Session1 -ScriptBlock {Get-Mailbox -ResultSize 1} Invoke-Command -Session $Session2 -ScriptBlock {Get-Mailbox -ResultSize 1}
Em uma sessão de API REST:
No primeiro comando Connect-ExchangeOnline , use o parâmetro Prefixo com o valor C1.
Armazene os primeiros detalhes de conexão da API REST na variável nomeada
$ConnectionInfo1
executando o seguinte comando:$ConnectionInfo1 = Get-ConnectionInformation | Where-Object { $_.ModulePrefix -eq "C1"}
No segundo comando Connect-ExchangeOnline , use o parâmetro Prefixo com o valor C2.
Armazene os segundos detalhes de conexão da API REST na variável nomeada
$ConnectionInfo2
executando o seguinte comando:$ConnectionInfo1 = Get-ConnectionInformation | Where-Object { $_.ModulePrefix -eq "C2"}
Agora você pode executar comandos em qualquer sessão. Por exemplo:
$CommandStr1 = "Get-$($ConnectionInfo1.ModulePrefix)Mailbox -ResultSize 10" Invoke-Expression $CommandStr1
Ou
$CommandStr2 = "Get-$($ConnectionInfo2.ModulePrefix)Mailbox -ResultSize 10" Invoke-Expression $CommandStr2
Comentários
https://aka.ms/ContentUserFeedback.
Em breve: Ao longo de 2024, eliminaremos os problemas do GitHub como o mecanismo de comentários para conteúdo e o substituiremos por um novo sistema de comentários. Para obter mais informações, consulteEnviar e exibir comentários de