Назначение политик Skype для бизнеса для каждого пользователя в Сети с помощью PowerShell для Microsoft 365

Эта статья относится к Microsoft 365 корпоративный и Office 365 корпоративный.

Использование PowerShell для Microsoft 365 — это эффективный способ назначения параметров связи для каждого пользователя с помощью политик Skype для бизнеса Online.

Подготовка к выполнению команд PowerShell

Чтобы получить настройки для выполнения команд, воспользуйтесь приведенными ниже инструкциями (пропустите выполненные ранее шаги).

Примечание.

Соединитель Skype для бизнеса Online в настоящее время является частью последнего модуля Teams PowerShell. Если вы используете последний общедоступный выпуск Teams PowerShell, вам не нужно устанавливать соединитель Skype для бизнеса Online.

  1. Установите модуль Teams PowerShell.

  2. Откройте командную строку Windows PowerShell и выполните указанные команды:

    Import-Module MicrosoftTeams
    Connect-MicrosoftTeams
    

    При поступлении соответствующего запроса системы введите имя и пароль учетной записи администратора Skype для бизнеса Online.

Обновление параметров внешней связи для учетной записи пользователя

Предположим, вы решили изменить параметры внешней связи для учетной записи пользователя. Например, необходимо разрешить Семену связываться с федеративными пользователями (задав для свойства EnableFederationAccess значение True) и запретить обмениваться данными с пользователями Windows Live (установив для политики EnablePublicCloudAccess значение False). Для этого необходимо выполнить два действия:

  1. найти политику внешнего доступа, которая отвечает нашим критериям;

  2. назначить эту политику внешнего доступа пользователю Семену.

Как определить, какую политику внешнего доступа назначить Алексу? Приведенная ниже команда возвращает все политики внешнего доступа, в которых для свойства EnableFederationAccess и политики EnablePublicCloudAccess заданы значения "True" и "False" соответственно.

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

Если вы не создали пользовательские экземпляры ExternalAccessPolicy, эта команда возвращает одну политику, которая соответствует нашим критериям (FederationOnly). Пример:

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

Теперь мы знаем, какую политику назначить пользователю Семену, и сделаем это с помощью командлета Grant-CsExternalAccessPolicy. Пример:

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

Назначить политику просто: можно указать удостоверение пользователя и имя назначаемой политики.

А когда дело доходит до политик и назначений политик, вы не ограничиваетесь работой с учетными записями пользователей по одному разу. Например, предположим, что вам нужен список всех пользователей, которым разрешено обмениваться данными с федеративными партнерами и пользователями Windows Live. Мы уже знаем, что этим пользователям назначена политика доступа к внешним пользователям FederationAndPICDefault. Так как мы знаем это, вы можете отобразить список всех этих пользователей, выполнив одну простую команду. Вот команда:

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

Другими словами, отобразятся все пользователи, для свойства ExternalAccessPolicy которых задано значение FederationAndPICDefault. (Чтобы ограничить объем сведений, которые появляются на экране, используйте командлет Select-Object для показа только отображаемого имени каждого пользователя.)

Для настройки всех учетных записей пользователей на применение одной политики воспользуйтесь следующей командой:

Get-CsOnlineUser | Grant-CsExternalAccessPolicy "FederationAndPICDefault"

С помощью командлета Get-CsOnlineUser эта команда возвращает коллекцию всех пользователей с включенной поддержкой Lync, затем передает эти сведения командлету Grant-CsExternalAccessPolicy, который назначает политику FederationAndPICDefault каждому пользователю в коллекции.

В качестве дополнительного примера предположим, что вы ранее назначили Алексу политику FederationAndPICDefault, а теперь передумали и хотели бы, чтобы он управлялся глобальной политикой внешнего доступа. Глобальную политику нельзя явно назначить какому-либо пользователю. Вместо этого для данного пользователя используется глобальная политика, если ему не назначена политика на уровне пользователя. Таким образом, чтобы пользователем Семеном управляла глобальная политика, необходимо отменить все ранее назначенные ему индивидуальные политики. Вот пример команды:

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

Эта команда задает значение Null ($Null) для имени политики внешнего доступа, назначенной Семену. Значение Null означает "ничего". Другими словами, Семену не назначена ни одна политика внешнего доступа. Если пользователю не назначена ни одна политика внешнего доступа, для управления им используется глобальная политика.

Управление большим числом пользователей

Чтобы управлять большим количеством пользователей (1000 или более), необходимо пакетировать команды с помощью блока скрипта с помощью командлета Invoke-Command . В предыдущих примерах при каждом выполнении командлета необходимо настроить вызов, а затем дождаться результата перед отправкой обратно. При использовании блока скриптов это позволяет удаленно выполнять командлеты и после завершения отправлять данные обратно.

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

Это позволяет одновременно найти 500 пользователей, у которых нет политики клиента. Она предоставляет им политику клиента ClientPolicyNoIMURL и политику внешнего доступа FederationAndPicDefault. Результаты объединяются в группы по 50 человек, а затем каждый пакет из 50 отправляется на удаленный компьютер.

См. также

Управление Skype для бизнеса Online с помощью PowerShell

Управление Microsoft 365 с помощью PowerShell

Начало работы с PowerShell для Microsoft 365