使用 Office 365 PowerShell 管理用户帐户和许可证(六)

时间:2022-01-04 05:54:01


使用 Office 365 PowerShell 禁止访问服务

 

上一次修改主题:2016-12-21

解释如何使用 Office 365 PowerShell 来添加或移除您组织中的用户对 Office 365 服务的访问权限。

当向 Office 365 帐户分配许可计划中的许可证时,用户就可以使用该许可证提供的 Office 365 服务。但是,您可以控制用户可以访问的 Office 365 服务。例如,即使许可证允许访问 SharePoint Online,您也可以禁用对它的访问。事实上,您可以使用 Office 365 PowerShell 禁止访问以下任何数量的相关服务:

  • 单个帐户。

  • 一组帐户。

  • 组织中的所有帐户。

目录:

简版(说明不含解释)

长版(说明附有详细解释)

另请参阅

此部分介绍的步骤未经任何渲染或过多解释。如果您有任何疑问或想了解更多信息,可以阅读本主题的其余部分。

若要对用户禁用单个许可计划中的 Office 365 服务,请执行以下步骤:

  1. 通过使用以下语法来确定许可计划中不需要的服务:

    $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"
    
  2. 将步骤 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}
        
      • 使用特定帐户列表   若要完成此操作,请执行以下步骤:

        1. 创建一个文本文件,在它的每一行上包含一个帐户,如下所示:

          akol@contoso.com
          tjohnston@contoso.com
          kakers@contoso.com
          

          在此示例中,该文本文件是 C:\My Documents\Accounts.txt。

        2. 运行以下命令:

          Get-Content "C:\My Documents\Accounts.txt" | foreach {Set-MsolUserLicense -UserPrincipalName $_ -LicenseOptions $LO}
          

若要对用户禁用所有可用许可计划中的 Office 365 服务,请执行以下步骤:

  1. 将此脚本复制并粘贴到记事本。

    $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
    }
    
  2. 为您的环境自定义以下值:

    • <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
    }
    
  3. 在易于您查找的位置将脚本另存为 RemoveO365Services.ps1。在此示例中,我们将文件保存在“C:\O365 Scripts”。

  4. 使用以下命令在 Office 365 PowerShell 中运行此脚本。

    & "C:\O365 Scripts\RemoveO365Services.ps1"
    
使用 Office 365 PowerShell 管理用户帐户和许可证(六)注意:
若要消除这些步骤的影响(即重新启用这些已禁用的服务),请再次执行这些步骤,但使用 DisabledPlans 参数的值 $null

返回顶部

您在使用 Office 365 PowerShell 签发许可证时会默认启用所有服务。这是一件好事:这意味着您可以快速、轻松地将许可证分配给用户,无需一直指定启用每一项服务。

但是,尽管如此,您可能还需要限制对某些用户可用的服务;例如,某些用户可能应该具有 Office Professional Plus、Skype for Business Online 和 Exchange Online 的访问权限,但不应具有 SharePoint Online 或 Office Online 的访问权限。能否以这种方式对帐户进行限制?事实上这是可行的。为了解释其工作原理,现在我们采用一种两步方法来处理此问题:

  1. 向用户分配一个自动启用所有服务的 Office 365 许可证。

  2. 运行一对 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),然后指明您想要禁用的每项服务,使用逗号将这些服务分开。

使用 Office 365 PowerShell 管理用户帐户和许可证(六)注意:
确保将新的 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 站点:

使用 Office 365 PowerShell 管理用户帐户和许可证(六)

现在这些选项对她不再可用:

使用 Office 365 PowerShell 管理用户帐户和许可证(六)

这正是我们希望发生的。

如果我们稍后改变主意:能否重新启用这些服务?当然可以。要为某个用户重新启用所有服务,只需使用此命令创建以下 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)。

返回顶部