Share via


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

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

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

Scenario 1: Eseguire Exchange Online cmdlet

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 complessivo che viene usato è importante.

  • In una sessione remota di PowerShell: usare il cmdlet Get-PSSession per archiviare i dettagli della sessione remota di PowerShell 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 dell'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 remota di PowerShell: usare il cmdlet Get-PSSession per archiviare i dettagli della sessione remota di PowerShell 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 dell'API REST: eseguire il comando seguente:

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

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

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

  • In una sessione remota di PowerShell: usare il cmdlet Get-PSSession per archiviare i dettagli della sessione remota di PowerShell 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 dell'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 Exchange Online cmdlet 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 remota di PowerShell:

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

    2. Usare il cmdlet Get-PSSession per archiviare i dettagli della seconda sessione remota di PowerShell 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 usare il parametro Prefix con il valore C1.

    2. Archiviare i primi dettagli di connessione dell'API REST nella variabile denominata $ConnectionInfo1 eseguendo il comando seguente:

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

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

      $ConnectionInfo1 = Get-ConnectionInformation | Where-Object { $_.ModulePrefix -eq "C2"}
      
    5. È ora possibile eseguire 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