Soluzioni alternative per scenari di Invoke-Command nelle connessioni API REST

In più connessioni a Exchange Online o Security & Compliance PowerShell nella stessa finestra, si usa il cmdlet Invoke-Command per eseguire script o comandi in una specifica sessione di PowerShell remota. Tuttavia, il cmdlet Invoke-Command non funziona nelle connessioni API REST a Exchange Online o Security & Compliance PowerShell.

Questo articolo offre alternative all'API REST per gli scenari che usano comandi Invoke-Command .

Scenario 1: Eseguire i cmdlet di Exchange Online

In questo esempio viene trovata l'identità di qualsiasi altro utente ($Us = $User.Identity).

Consiglio

Altri comandi erano necessari per ottenere i valori di $User e quindi $Us. Questi comandi non sono importanti. L'approccio generale che viene utilizzato è ciò che è importante.

  • In una sessione di PowerShell remota: Utilizzare il cmdlet Get-PSSession per archiviare i dettagli della sessione di PowerShell remota nella variabile denominata $Session, quindi eseguire il comando seguente:

    Invoke-Command -Session $Session -ScriptBlock {Get-User $Using:Us | Select-Object DistinguishedName, ExternalDirectoryObjectId} -ErrorAction SilentlyContinue
    
  • In una sessione API REST: Eseguire il comando seguente:

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

In questo esempio viene trovata l'identità di un membro del gruppo:

  • In una sessione di PowerShell remota: Utilizzare il cmdlet Get-PSSession per archiviare i dettagli della sessione di PowerShell remota nella variabile denominata $Session, quindi eseguire il comando seguente:

    Invoke-Command -Session $Session -ScriptBlock {Get-Recipient -Filter "Members -eq '$($User.DistinguishedName)'" -RecipientTypeDetails MailUniversalDistributionGroup | Select-Object DisplayName, ExternalDirectoryObjectId, RecipientTypeDetails} -ErrorAction SilentlyContinue -HideComputerName
    
  • In una sessione API REST: Eseguire il comando seguente:

    Get-Recipient -Filter "Members -eq '$($User.DistinguishedName)'" -RecipientTypeDetails MailUniversalDistributionGroup | Format-List DisplayName, ExternalDirectoryObjectId, RecipientTypeDetails
    

Scenario 2: Eseguire i cmdlet di Exchange Online ed espandere proprietà specifiche

In questo esempio vengono trovate tutte le cassette postali in cui è impostata l'autorizzazione GrantSendOnBehalfTo e vengono restituiti gli utenti che dispongono dell'autorizzazione per la cassetta postale.

  • In una sessione di PowerShell remota: Utilizzare il cmdlet Get-PSSession per archiviare i dettagli della sessione di PowerShell remota nella variabile denominata $Session, quindi eseguire il comando seguente:

    Invoke-Command -Session $Session -ScriptBlock {Get-Mailbox -Filter "GrantSendOnBehalfTo -ne `$null" -ErrorAction SilentlyContinue | Select-Object ExternalDirectoryObjectId, GrantSendOnBehalfTo -ExpandProperty GrantSendOnBehalfTo}
    
  • In una sessione API REST: Eseguire il comando seguente:

    $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
    }
    

Scenario 3: Eseguire i cmdlet di Exchange Online in una sessione di PowerShell specifica quando sono presenti più sessioni

Questo esempio illustra come creare due sessioni di PowerShell nella stessa finestra ed eseguire il cmdlet Get-Mailbox in ogni sessione.

  • In una sessione di PowerShell remota:

    1. Utilizzare il cmdlet Get-PSSession per archiviare i dettagli della prima sessione di PowerShell remota nella variabile denominata $Session1.

    2. Utilizzare il cmdlet Get-PSSession per memorizzare i dettagli della seconda sessione di PowerShell remota nella variabile denominata $Session2.

    3. Eseguire i comandi seguenti:

      Invoke-Command -Session $Session1 -ScriptBlock {Get-Mailbox -ResultSize 1}
      
      Invoke-Command -Session $Session2 -ScriptBlock {Get-Mailbox -ResultSize 1}
      
  • In una sessione dell'API REST:

    1. Nel primo comando Connect-ExchangeOnline utilizzare il parametro Prefix con il valore C1.

    2. Archiviare i dettagli della prima connessione API REST nella variabile denominata $ConnectionInfo1 eseguendo il comando seguente:

      $ConnectionInfo1 = Get-ConnectionInformation | Where-Object { $_.ModulePrefix -eq "C1"}
      
    3. Nel secondo comando Connect-ExchangeOnline , utilizzare il parametro Prefix con il valore C2.

    4. Archiviare i dettagli della seconda connessione API REST nella variabile denominata $ConnectionInfo2 eseguendo il comando seguente:

      $ConnectionInfo1 = Get-ConnectionInformation | Where-Object { $_.ModulePrefix -eq "C2"}
      
    5. Ora è possibile eseguire i comandi in entrambe le sessioni. Ad esempio:

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

      Oppure

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