使用 Office 365 PowerShell 禁止访问服务
上一次修改主题:2016-12-21
解释如何使用 Office 365 PowerShell 来添加或移除您组织中的用户对 Office 365 服务的访问权限。
当向 Office 365 帐户分配许可计划中的许可证时,用户就可以使用该许可证提供的 Office 365 服务。但是,您可以控制用户可以访问的 Office 365 服务。例如,即使许可证允许访问 SharePoint Online,您也可以禁用对它的访问。事实上,您可以使用 Office 365 PowerShell 禁止访问以下任何数量的相关服务:
-
单个帐户。
-
一组帐户。
-
组织中的所有帐户。
目录:
-
本主题中的步骤需要您连接到 Office 365 PowerShell。有关说明,请参阅连接到 Office 365 PowerShell。
-
您可以使用 Get-MsolAccountSku cmdlet 查看可用的许可计划以及这些计划中提供的 Office 365 服务。有关详细信息,请参阅使用 Office 365 PowerShell 查看许可证和服务。
-
若要查看本主题中相关步骤的前后结果,请参阅查看服务的许可信息。
-
PowerShell 脚本可自动执行本主题中描述的过程。具体来说,此脚本允许您查看和禁用 Office 365 组织中的服务,包括 Sway。有关详细信息,请参阅使用 Office 365 PowerShell 禁止访问 Sway。
-
如果您使用 Get-MsolUser cmdlet 而无需使用 All 参数,仅可返回前 500 个帐户。
此部分介绍的步骤未经任何渲染或过多解释。如果您有任何疑问或想了解更多信息,可以阅读本主题的其余部分。
若要对用户禁用单个许可计划中的 Office 365 服务,请执行以下步骤:
-
通过使用以下语法来确定许可计划中不需要的服务:
$LO = New-MsolLicenseOptions -AccountSkuId <AccountSkuId> -DisabledPlans "<UndesirableService1>", "<UndesirableService2>"...
本示例创建 LicenseOptions 对象,该对象可以禁用名为
litwareinc:ENTERPRISEPACK
(Office 365 企业版 E3) 的许可计划中提供的 Office Online 和 SharePoint Online 服务。$LO = New-MsolLicenseOptions -AccountSkuId "litwareinc:ENTERPRISEPACK" -DisabledPlans "SHAREPOINTWAC", "SHAREPOINTENTERPRISE"
-
将步骤 1 中的 LicenseOptions 对象用于一个或多个用户。
-
若要创建一个已禁用服务的新帐户,请使用以下语法:
New-MsolUser -UserPrincipalName <Account> -DisplayName <DisplayName> -FirstName <FirstName> -LastName <LastName> -LicenseAssignment <AccountSkuId> -LicenseOptions $LO -UsageLocation <CountryCode>
本示例为 Allie Bellew 创建一个新帐户,用来分配许可证和禁用步骤 1 中所述的服务。
New-MsolUser -UserPrincipalName allieb@litwareinc.com -DisplayName "Allie Bellew" -FirstName Allie -LastName Bellew -LicenseAssignment litwareinc:ENTERPRISEPACK -LicenseOptions $LO -UsageLocation US
有关在 Office 365 PowerShell 中创建用户帐户的详细信息,请参阅使用 Office 365 PowerShell 创建用户帐户。
-
若要禁用现有授权用户的服务,请使用下面的语法:
Set-MsolUserLicense -UserPrincipalName <Account> -LicenseOptions $LO
本示例对用户 BelindaN@litwareinc.com 禁用服务。
Set-MsolUserLicense -UserPrincipalName belindan@litwareinc.com -LicenseOptions $LO
-
若要对所有现有的授权用户禁用步骤 1 中所述的服务,请运行以下命令:
$AllLicensed = Get-MsolUser -All | where {$_.isLicensed -eq $true}; $AllLicensed | foreach {Set-MsolUserLicense -LicenseOptions $LO}
-
若要对一组现有用户禁用服务,请使用下列两种方法之一来确定用户:
-
基于现有帐户属性筛选帐户 若要执行此操作,请使用以下语法:
$x = Get-MsolUser -All <FilterableAttributes>; $x | foreach {Set-MsolUserLicense -UserPrincipalName $_.UserPrincipalName -LicenseOptions $LO}
本示例对美国销售部门的用户禁用服务。
$USSales = Get-MsolUser -All -Department "Sales" -UsageLocation "US"; $USSales | foreach {Set-MsolUserLicense -UserPrincipalName $_.UserPrincipalName -LicenseOptions $LO}
-
使用特定帐户列表 若要完成此操作,请执行以下步骤:
-
创建一个文本文件,在它的每一行上包含一个帐户,如下所示:
akol@contoso.com tjohnston@contoso.com kakers@contoso.com
在此示例中,该文本文件是 C:\My Documents\Accounts.txt。
-
运行以下命令:
Get-Content "C:\My Documents\Accounts.txt" | foreach {Set-MsolUserLicense -UserPrincipalName $_ -LicenseOptions $LO}
-
-
-
若要对用户禁用所有可用许可计划中的 Office 365 服务,请执行以下步骤:
-
将此脚本复制并粘贴到记事本。
$AllLicensingPlans = Get-MsolAccountSku for($i = 0; $i -lt $AllLicensingPlans.Count; $i++) { $O365Licences = New-MsolLicenseOptions -AccountSkuId $AllLicensingPlans[$i].AccountSkuId -DisabledPlans "<UndesirableService1>", "<UndesirableService2>"... Set-MsolUserLicense -UserPrincipalName <Account> -LicenseOptions $O365Licences }
-
为您的环境自定义以下值:
-
<UndesirableService> 在此示例中,我们将使用 Office Online 和 SharePoint Online。
-
<Account> 在此示例中,我们将使用 belindan@litwareinc.com。
自定义的脚本如下所示:
$AllLicensingPlans = Get-MsolAccountSku for($i = 0; $i -lt $AllLicensingPlans.Count; $i++) { $O365Licences = New-MsolLicenseOptions -AccountSkuId $AllLicensingPlans[$i].AccountSkuId -DisabledPlans "SHAREPOINTWAC", "SHAREPOINTENTERPRISE" Set-MsolUserLicense -UserPrincipalName belindan@litwareinc.com -LicenseOptions $O365Licences }
-
-
在易于您查找的位置将脚本另存为
RemoveO365Services.ps1
。在此示例中,我们将文件保存在“C:\O365 Scripts
”。 -
使用以下命令在 Office 365 PowerShell 中运行此脚本。
& "C:\O365 Scripts\RemoveO365Services.ps1"
注意: |
---|
若要消除这些步骤的影响(即重新启用这些已禁用的服务),请再次执行这些步骤,但使用 DisabledPlans 参数的值 $null 。 |
您在使用 Office 365 PowerShell 签发许可证时会默认启用所有服务。这是一件好事:这意味着您可以快速、轻松地将许可证分配给用户,无需一直指定启用每一项服务。
但是,尽管如此,您可能还需要限制对某些用户可用的服务;例如,某些用户可能应该具有 Office Professional Plus、Skype for Business Online 和 Exchange Online 的访问权限,但不应具有 SharePoint Online 或 Office Online 的访问权限。能否以这种方式对帐户进行限制?事实上这是可行的。为了解释其工作原理,现在我们采用一种两步方法来处理此问题:
-
向用户分配一个自动启用所有服务的 Office 365 许可证。
-
运行一对 Office 365 PowerShell 命令,为该用户禁用指定的服务。
我们已执行第 1 步:我们的用户 (Belinda Newman) 具有 Office 365 许可证,使其可以访问所有 Office 365 服务。但是,我们希望修改 Belinda 的帐户,使其不具备 SharePoint Online (SHAREPOINTENTERPRISE
) 或 Office Online (SHAREPOINTWAC
) 的访问权限。应如何执行此操作?
方法如下:首先,使用 New-MsolLicenseOptions cmdlet 创建一个包含想要禁用的服务的 LicenseOption 对象。对于 Belinda,我们想要禁用SHAREPOINTENTERPRISE
和 SHAREPOINTWAC
,因此我们使用此命令:
$x = New-MsolLicenseOptions -AccountSkuId "litwareinc:ENTERPRISEPACK" -DisabledPlans "SHAREPOINTWAC", "SHAREPOINTENTERPRISE"
看出具体的工作原理了吗?您指定许可计划 (litwareinc:ENTERPRISEPACK
),然后指明您想要禁用的每项服务,使用逗号将这些服务分开。
注意: |
---|
确保将新的 LicenseOption 对象存储在变量中。在上述示例中,我们使用了 $x ,尽管您可以使用任何有效的 Windows PowerShell 变量名称。 |
现在,我们可以使用以下命令禁用 Belinda 对这两项服务的访问权限:
Set-MsolUserLicense -UserPrincipalName BelindaN@litwareinc.com -LicenseOptions $x
没有太复杂的操作,只需:调用 Set-MsolUserLicense cmdlet 并包含 LicenseOptions 参数,以及包含我们想要禁用的计划的变量 ($x
)。现在当我们通过运行以下命令 ((Get-MsolUser -UserPrincipalName belindan@litwareinc.com).Licenses.ServiceStatus
) 查看 Belinda 的许可证信息时会看到什么?如下:
ServicePlan ProvisioningStatus ----------- ------------------ SWAY Success INTUNE_O365 Success YAMMER_ENTERPRISE PendingInput RMS_S_ENTERPRISE Success OFFICESUBSCRIPTION Success MCOSTANDARD Success SHAREPOINTWAC Disabled SHAREPOINTENTERPRISE Disabled EXCHANGE_S_ENTERPRISE Success
很酷吧?当然,如果愿意,我们可以对多个用户执行此相同操作。例如,此命令将为所有许可用户禁用此相同的两项服务:
Get-MsolUser | Where-Object {$_.isLicensed -eq $True} | Set-MsolUserLicense -LicenseOptions $x
请记住,Belinda 仍具有有效的 Office 365 许可证;只是现在她能访问的服务更少。在我们禁用这两项服务之前,Belinda 可以访问新闻源、OneDrive 和 SharePoint Online 站点:
现在这些选项对她不再可用:
这正是我们希望发生的。
如果我们稍后改变主意:能否重新启用这些服务?当然可以。要为某个用户重新启用所有服务,只需使用此命令创建以下 LicenseOption 对象:
$x = New-MsolLicenseOptions -AccountSkuId "litwareinc:ENTERPRISEPACK" -DisabledPlans $null
该命令可以执行哪些操作?首先,Windows PowerShell 常量 $null
意味着什么都没有。(或者用一种技术性更强的语言来说,它表示“空值”。)您应该还记得,当我们使用 New-MsolLicenseOptions cmdlet 时,必须指明我们想要禁用的服务。在这种情况下,我们不想禁用任何服务。这可能会让您相信,我们可以使用如下所示的命令,即没有为 DisabledPlans 参数指定值的命令:
$x = New-MsolLicenseOptions -AccountSkuId "litwareinc:ENTERPRISEPACK" -DisabledPlans ""
但是,这不起作用。相反,它将生成一个错误消息:
Set-MsolUserLicense : Cannot bind parameter 'LicenseOptions'. Cannot convert the "" value of type "System.String" to type "Microsoft.Online.Administration.LicenseOption".
幸运地是,将该参数值设置为 $null
是可行的:
$x = New-MsolLicenseOptions -AccountSkuId "litwareinc:ENTERPRISEPACK" -DisabledPlans $null
这就意味着,当您运行 Set-MsolUserLicense cmdlet 时,我们将告诉 Set-MsolUserLicense,我们不希望 Belinda 被禁止访问任何服务:
Set-MsolUserLicense -UserPrincipalName BelindaN@litwareinc.com -LicenseOptions $x
如果没有禁用任何服务,这必须意味着所有服务都已启用,这很合理。
现在您已清楚这一切如何工作,我们将向您演示如何签发许可证并禁用指定服务,只需使用同一个命令即可。这听起来令人印象深刻,但老实说,没有任何关系:您只需在同一个命令中同时包含 AddLicenses 和 LicenseOptions 参数。换句话说,您需要首先创建 LicenseOption 对象:
$x = New-MsolLicenseOptions -AccountSkuId "litwareinc:ENTERPRISEPACK" -DisabledPlans "SHAREPOINTWAC", "SHAREPOINTENTERPRISE"
然后如前所述,在命令中使用 AddLicenses 和 LicenseOptions 参数:
Set-MsolUserLicense -UserPrincipalName BelindaN@litwareinc.com -AddLicenses "litwareinc:ENTERPRISEPACK" -LicenseOptions $x
该命令将向 Belinda Newman 签发一个新的许可证,但在该许可证中禁用了 Skype for Business Online (SHAREPOINTWAC
) 和 SharePoint Online (SHAREPOINTENTERPRISE
)。