PowerShell for Microsoft 365 を使用してユーザーごとのSkype for Businessオンライン ポリシーを割り当てる

この記事は、Microsoft 365 Enterprise および Office 365 Enterprise の両方に適用されます。

PowerShell for Microsoft 365 を使用すると、Skype for Business Online ポリシーを使用してユーザーごとの通信設定を効率的に割り当てることができます。

PowerShell コマンドの実行を準備する

次の手順にしたがってコマンドを実行するためのセットアップを行います (すでに終わっている場合はこれらの手順は省略可能です)。

注:

Skype for Business Online Connector は現在、最新の Teams PowerShell モジュールに含まれています。 最新の Teams PowerShell パブリック リリースをご利用の場合は、Skype for Business Online Connector をインストールする必要はありません。

  1. Teams PowerShell モジュールをインストールします。

  2. Windows PowerShell コマンド プロンプトを開いて次のコマンドを実行します:

    Import-Module MicrosoftTeams
    Connect-MicrosoftTeams
    

    ダイアログ ボックスが表示されたら、Skype for Business Online 管理者のアカウント名とパスワードを入力します。

ユーザー アカウントの外部通信設定を更新する

ユーザー アカウントの外部通信設定を変更するとします。 たとえば、Alex がフェデレーション ユーザーと通信できるようにする (EnableFederationAccess を True に設定) と同時に、Windows Live ユーザーとは通信できないようにするとします (EnablePublicCloudAccess を False に設定)。 この場合、次の 2 つの手順が必要になります。

  1. この条件を満たす外部アクセス ポリシーを探す。

  2. その外部アクセス ポリシーを Alex に割り当てる。

Alex を割り当てる外部アクセス ポリシーを決定するにはどうすればよいですか? 次のコマンドは、EnableFederationAccess が True に設定され、EnablePublicCloudAccess が False に設定されたすべての外部アクセス ポリシーを返します。

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

ExternalAccessPolicy のカスタム インスタンスを作成していない限り、そのコマンドは条件 (FederationOnly) を満たす 1 つのポリシーを返します。 次に例を示します:

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

これで、Alex に割り当てるポリシーが特定されたため、このポリシーを Grant-CsExternalAccessPolicy コマンドレットを使用して割り当てることができます。 次に例を示します:

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

ポリシーの割り当ては簡単です。ユーザーの ID と割り当てるポリシーの名前を指定できます。

ポリシーとポリシー割り当てに関して言えば、一度に処理するユーザー アカウントの数は 1 つに制限されません。 たとえば、フェデレーション パートナーおよび Windows Live ユーザーとの通信が許可されているすべてのユーザーのリストが必要だとします。 このようなユーザーには外部ユーザー アクセス ポリシーの FederationAndPICDefault が割り当てられていることはすでにわかっています。 それがわかっているため、1 つの単純なコマンドを実行するだけで、このようなすべてのユーザーのリストを表示することができます。 コマンドを次に示します。

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

つまり、ExternalAccessPolicy プロパティが FederationAndPICDefault に設定されているすべてのユーザーを表示します。 (また、画面に表示される情報の量を制限するには、Select-Object コマンドレットを使用して、各ユーザーの表示名のみを表示します。

すべてのユーザー アカウントが同じポリシーを使用するように構成する場合は次のコマンドを使用します。

Get-CsOnlineUser | Grant-CsExternalAccessPolicy "FederationAndPICDefault"

このコマンドでは、Get-CsOnlineUser を使用して、Lync に対して有効になっているすべてのユーザーのコレクションを返します。その後、そのすべての情報が Grant-CsExternalAccessPolicy に送信され、FederationAndPICDefault ポリシーがコレクション内のすべてのユーザーそれぞれに割り当てられます。

追加の例として、以前に Alex に FederationAndPICDefault ポリシーを割り当て、これで考えを変更し、グローバル外部アクセス ポリシーで管理したいとします。 グローバル ポリシーは誰かに明示的に割り当てることはできません。 代わりに、ユーザーごとのポリシーがそのユーザーに割り当てられていない場合は、特定のユーザーにグローバル ポリシーが使用されます。 つまり、Alex をグローバル ポリシーで管理する場合は、事前に彼に割り当てられたユーザーごとのポリシーを解除する必要があります。 コマンドの例を次に示します。

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

このコマンドでは、Alex に割り当てられた外部アクセス ポリシーの名前を Null 値 ($Null) に設定します。 Null は "何もない" という意味です。 言い換えれば、どの外部アクセス ポリシーも Alex に割り当てられていないということになります。 どの外部アクセス ポリシーもユーザーに割り当てられていなければ、そのユーザーはグローバル ポリシーによって管理されます。

多数のユーザーの管理

多数のユーザー (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 の各バッチがリモート コンピューターに送信されます。

関連項目

PowerShell を使用して Skype for Business Online を管理する

PowerShell で Microsoft 365を管理する

Microsoft 365 用 PowerShell の使用を開始する