使用适用于 Microsoft 365 的 PowerShell 分配每个用户Skype for Business联机策略
此文章适用于 Microsoft 365 企业版和 Office 365 企业版。
使用 PowerShell for Microsoft 365 是使用 Skype for Business Online 策略分配每用户通信设置的有效方法。
准备运行 PowerShell 命令
按照以下说明设置运行命令, (跳过) 已完成的步骤:
注意
Skype for Business Online 连接器目前是最新 Teams PowerShell 模块的一部分。 如果你使用的是最新 Teams PowerShell 公共版本,则无需安装 Skype for Business Online 连接器。
开启 Windows PowerShell 命令提示符并运行以下命令:
Import-Module MicrosoftTeams Connect-MicrosoftTeams
出现提示时,输入Skype for Business Online 管理员帐户名称和密码。
更新用户帐户的外部通信设置
假设你想要更改用户帐户上的外部通信设置。 例如,你希望允许 Alex 与联合用户通信, (EnableFederationAccess 等于 True) 但不与 Windows Live 用户通信, (EnablePublicCloudAccess 等于 False) 。 为此,需要执行两项操作:
找到符合我们的条件的外部访问策略。
将该外部访问策略分配给 Alex。
如何确定要分配哪个外部访问策略 Alex? 以下命令返回在 EnableFederationAccess 设置为 True 且 EnablePublicCloudAccess 设置为 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
现在,你已知道要分配给 Alex 的策略,我们可以使用 Grant-CsExternalAccessPolicy cmdlet 分配该策略。 下面是一个示例:
Grant-CsExternalAccessPolicy -Identity "Alex Darrow" -PolicyName "FederationOnly"
分配策略很简单:可以指定要分配的用户的标识和策略的名称。
在策略和策略分配方面,你并不局限于一次使用一个用户帐户。 例如,假设您需要获得可与联盟伙伴和 Windows Live 用户通信的所有用户的列表。 我们已经知道,这些用户已分配有外部用户访问策略 FederationAndPICDefault。 因为我们知道,你可以通过运行一个简单的命令来显示所有这些用户的列表。 下面是 命令:
Get-CsOnlineUser -Filter {ExternalAccessPolicy -eq "FederationAndPICDefault"} | Select-Object DisplayName
换句话说,向我们显示 ExternalAccessPolicy 属性设置为 FederationAndPICDefault 的所有用户。 (为了限制屏幕上显示的信息量,请使用 Select-Object cmdlet 仅显示每个用户的显示名称。)
若要将所有用户帐户配置为使用同一策略,请使用以下命令:
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 cmdlet 通过脚本块对命令进行批处理。 在前面的示例中,每次执行 cmdlet 时,它都必须设置调用,然后等待结果,然后再将其发送回。 使用脚本块时,这允许远程执行 cmdlet,完成后再发送回数据。
$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
反馈
https://aka.ms/ContentUserFeedback。
即将发布:在整个 2024 年,我们将逐步淘汰作为内容反馈机制的“GitHub 问题”,并将其取代为新的反馈系统。 有关详细信息,请参阅:提交和查看相关反馈