Partilhar via


Soluções para cenários de Invoke-Command em ligações à API REST

Em várias ligações ao Exchange Online ou ao PowerShell de Conformidade do & de Segurança na mesma janela, utilize o cmdlet Invoke-Command para executar scripts ou comandos numa sessão remota específica do PowerShell. No entanto, o cmdlet Invoke-Command não funciona nas ligações da API REST ao Exchange Online ou ao PowerShell de Conformidade do & de Segurança.

Este artigo oferece alternativas à API REST para cenários que utilizam comandos Invoke-Command .

Cenário 1: Executar cmdlets do Exchange Online

Este exemplo localiza a identidade de qualquer outro utilizador ($Us = $User.Identity).

Dica

Foram necessários outros comandos para obter os valores de $User e, portanto, $Us. Estes comandos não são importantes. A abordagem geral que está a ser utilizada é o que é importante.

  • Numa sessão remota do PowerShell: utilize o cmdlet Get-PSSession para armazenar os detalhes remotos da sessão do PowerShell na variável com o nome $Sessione, em seguida, execute o seguinte comando:

    Invoke-Command -Session $Session -ScriptBlock {Get-User $Using:Us | Select-Object DistinguishedName, ExternalDirectoryObjectId} -ErrorAction SilentlyContinue
    
  • Numa sessão da API REST: execute o seguinte comando:

    Get-User $Us | Format-List DistinguishedName, ExternalDirectoryObjectId
    

Este exemplo localiza a identidade de um membro do grupo:

  • Numa sessão remota do PowerShell: utilize o cmdlet Get-PSSession para armazenar os detalhes remotos da sessão do PowerShell na variável com o nome $Sessione, em seguida, 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
    
  • Numa sessão da 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 do Exchange Online e expandir propriedades específicas

Este exemplo localiza todas as caixas de correio onde a permissão GrantSendOnBehalfTo está definida e, em seguida, devolve os utilizadores que têm a permissão na caixa de correio.

  • Numa sessão remota do PowerShell: utilize o cmdlet Get-PSSession para armazenar os detalhes remotos da sessão do PowerShell na variável com o nome $Sessione, em seguida, execute o seguinte comando:

    Invoke-Command -Session $Session -ScriptBlock {Get-Mailbox -Filter "GrantSendOnBehalfTo -ne `$null" -ErrorAction SilentlyContinue | Select-Object ExternalDirectoryObjectId, GrantSendOnBehalfTo -ExpandProperty GrantSendOnBehalfTo}
    
  • Numa sessão da 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 do Exchange Online numa sessão específica do PowerShell quando estiverem presentes várias sessões

Este exemplo mostra como criar duas sessões do PowerShell na mesma janela e executar o cmdlet Get-Mailbox em cada sessão.

  • Numa sessão remota do PowerShell:

    1. Utilize o cmdlet Get-PSSession para armazenar os primeiros detalhes da sessão remota do PowerShell na variável com o nome $Session1.

    2. Utilize o cmdlet Get-PSSession para armazenar os segundos detalhes remotos da sessão do PowerShell na variável com o nome $Session2.

    3. Execute os seguintes comandos:

      Invoke-Command -Session $Session1 -ScriptBlock {Get-Mailbox -ResultSize 1}
      
      Invoke-Command -Session $Session2 -ScriptBlock {Get-Mailbox -ResultSize 1}
      
  • Numa sessão da API REST:

    1. No primeiro comando Connect-ExchangeOnline , utilize o prefixo do parâmetro com o valor C1.

    2. Armazene os primeiros detalhes de ligação da API REST na variável com o nome $ConnectionInfo1 ao executar o seguinte comando:

      $ConnectionInfo1 = Get-ConnectionInformation | Where-Object { $_.ModulePrefix -eq "C1"}
      
    3. No segundo comando Connect-ExchangeOnline , utilize o prefixo do parâmetro com o valor C2.

    4. Armazene os detalhes da segunda ligação da API REST na variável com o nome $ConnectionInfo2 ao executar o seguinte comando:

      $ConnectionInfo1 = Get-ConnectionInformation | Where-Object { $_.ModulePrefix -eq "C2"}
      
    5. Agora pode executar comandos em qualquer uma das sessões. Por exemplo:

      $CommandStr1 = "Get-$($ConnectionInfo1.ModulePrefix)Mailbox -ResultSize 10"
      
      Invoke-Expression $CommandStr1
      

      Ou

      $CommandStr2 = "Get-$($ConnectionInfo2.ModulePrefix)Mailbox -ResultSize 10"
      
      Invoke-Expression $CommandStr2