Assegnare criteri online Skype for Business per utente con PowerShell per Microsoft 365

Questo articolo si applica sia a Microsoft 365 Enterprise che a Office 365 Enterprise.

L'uso di PowerShell per Microsoft 365 è un modo efficiente per assegnare le impostazioni di comunicazione per utente con i criteri di Skype for Business Online.

Preparare l'esecuzione dei comandi di PowerShell

Utilizzare queste istruzioni per ottenere la configurazione che consenta di eseguire i comandi (ignorare i passaggi già completati):

Nota

Il connettore di Skype for Business Online fa parte al momento del modulo PowerShell di Teams più recente. Se si usa la versione pubblica di PowerShell di Teams più recente, non è necessario installare il connettore di Skype for Business Online.

  1. Installare il modulo di PowerShell di Teams.

  2. Aprire il prompt dei comandi Windows PowerShell ed eseguire quanto segue:

    Import-Module MicrosoftTeams
    Connect-MicrosoftTeams
    

    Quando richiesto, immettere il nome e la password dell'account Administrator di Skype for Business online.

Aggiornamento delle impostazioni di comunicazione esterna per un account utente

Si supponga di voler modificare le impostazioni di comunicazione esterna in un account utente. Ad esempio, si desidera consentire ad Alex di comunicare con utenti federati (EnableFederationAccess è uguale a True), ma non con utenti di Windows Live (EnablePublicCloudAccess è uguale a False). A tale scopo, è necessario eseguire due operazioni:

  1. Individuare un criterio di accesso esterno che soddisfi i criteri necessari.

  2. Assegnare tale criterio di accesso esterno ad Alex.

Come si determinano i criteri di accesso esterno da assegnare ad Alex? Il comando seguente restituisce tutti i criteri di accesso esterno nei quali EnableFederationAccess è impostato su True e EnablePublicCloudAccess è impostato su False:

Get-CsExternalAccessPolicy -Include All| Where-Object {$_.EnableFederationAccess -eq $True -and $_.EnablePublicCloudAccess -eq $False}

A meno che non siano state create istanze personalizzate di ExternalAccessPolicy, il comando restituisce un criterio che soddisfa i criteri (FederationOnly). Ecco un esempio:

Identity                          : Tag:FederationOnly
Description                       :
EnableFederationAccess            : True
EnableXmppAccess                  : False
EnablePublicCloudAccess           : False
EnablePublicCloudAudioVideoAccess : False
EnableOutsideAccess               : True

Quando si conosce il criterio da assegnare ad Alex, è possibile assegnarlo utilizzando il cmdlet Grant-CsExternalAccessPolicy. Ecco un esempio:

Grant-CsExternalAccessPolicy -Identity "Alex Darrow" -PolicyName "FederationOnly"

L'assegnazione di un criterio è semplice: è possibile specificare l'identità dell'utente e il nome del criterio da assegnare.

Nel caso di criteri e assegnazione dei criteri, non ci si limita a effettuare operazioni con account utenti una sola volta. Ad esempio, si supponga che sia necessario disporre di un elenco di tutti gli utenti che possono comunicare con partner federati e con gli utenti di Windows Live. È noto che a tali utenti è stato assegnato il criterio di accesso utente esterno FederationAndPICDefault. Dal momento che si conosce tale informazione, è possibile visualizzare un elenco di tutti gli utenti eseguendo un comando semplice. Ecco il comando:

Get-CsOnlineUser -Filter {ExternalAccessPolicy -eq "FederationAndPICDefault"} | Select-Object DisplayName

in altre parole, è possibile visualizzare tutti gli utenti per i quali la proprietà ExternalAccessPolicy è impostata su FederationAndPICDefault. Per limitare la quantità di informazioni che vengono visualizzate sullo schermo, utilizzare il cmdlet Select-Object per visualizzare soltanto il nome di ogni utente.

Per configurare tutti gli account utente affinché utilizzino quello stesso criterio, usare questo comando:

Get-CsOnlineUser | Grant-CsExternalAccessPolicy "FederationAndPICDefault"

Il comando utilizza Get-CsOnlineUser per restituire una raccolta di tutti gli utenti che sono stati abilitati per Lync. In seguito, invia tutte le informazioni su Grant-CsExternalAccessPolicy che assegna il criterio FederationAndPICDefault a tutti gli utenti presenti nella raccolta.

Si supponga di aver assegnato in precedenza ad Alex il criterio FederationAndPICDefault e di aver cambiato idea e di volerlo gestire con i criteri di accesso esterno globali. Non è possibile assegnare in modo esplicito il criterio globale. I criteri globali vengono invece usati per un determinato utente se a tale utente non è assegnato alcun criterio per utente. Pertanto, se si desidera che Alex sia gestito dal criterio globale, è necessario non assegnare i criteri per utente assegnati in precedenza all'utente. Ecco un comando di esempio:

Grant-CsExternalAccessPolicy -Identity "Alex Darrow" -PolicyName $Null

Il comando imposta il nome del criterio di accesso esterno assegnato ad Alex su un valore ($Null). Null vuol dire "niente". In altre parole, nessun criterio di accesso esterno viene assegnato ad Alex. Se non viene assegnato alcun criterio di accesso esterno a un utente, quest'ultimo viene gestito dal criterio globale.

Gestione di un numero elevato di utenti

Per gestire un numero elevato di utenti (1000 o più), è necessario inviare in batch i comandi tramite un blocco di script usando il cmdlet Invoke-Command . Negli esempi precedenti, ogni volta che viene eseguito un cmdlet, deve configurare la chiamata e quindi attendere il risultato prima di inviarlo di nuovo. Quando si usa un blocco di script, questo consente di eseguire i cmdlet in remoto e, una volta completati, inviare nuovamente i dati.

$s = Get-PSSession | Where-Object { ($.ComputerName -like '*.online.lync.com' -or $.Computername -eq 'api.interfaces.records.teams.microsoft.com') -and $.State -eq 'Opened' -and $.Availability -eq 'Available' }

$users = Get-CsOnlineUser -Filter { ClientPolicy -eq $null } -ResultSize 500

$batch = 50
$filter = ''
$total = $users.Count
$count = 0
    $users | ForEach-Object {
    $upn = $_.UserPrincipalName
    $filter += "(UserPrincipalName -eq '$upn')"
    $batch--
    $count++
    if (($batch -eq 0) -or ($count -eq $total)) {
        $filterSB=[ScriptBlock]::Create($filter)
        Invoke-Command -Session $s -ScriptBlock {param($f) Get-CsOnlineUser -filter $f | Grant-CsClientPolicy -PolicyName "ClientPolicyNoIMURL" -Passthru | Grant-CsExternalAccessPolicy -PolicyName "FederationAndPICDefault"} -ArgumentList $filterSB

        # Reset
        $batch = 50
        $filter = ''
    } else {
        $filter += " -or "
    }
}

Vengono trovati 500 utenti alla volta che non dispongono di criteri client. Concede loro i criteri client "ClientPolicyNoIMURL" e i criteri di accesso esterno "FederationAndPicDefault". I risultati vengono raggruppati in gruppi di 50 e ogni batch di 50 viene quindi inviato al computer remoto.

Vedere anche

Gestire Skype for Business Online con PowerShell

Gestire Microsoft 365 con PowerShell

Guida introduttiva a PowerShell per Microsoft 365