使用 Office 365 PowerShell 管理用户帐户和许可证(四)查看服务的许可信息



查看服务的许可信息

 

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

说明如何使用 Office 365 PowerShell 来确定已指派给用户的 Office 365 服务。

在 Office 365 中,许可计划(也称为 SKU 或 Office 365 计划)提供的许可证可授予用户访问定义用于这些计划的 Office 365 服务的权限。但是,用户可能不能访问他们当前分配到的许可证所提供的所有服务。您可以使用 Office 365 PowerShell 来查看用户帐户的服务状态。

目录:

简版(说明不含解释)

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

另请参阅

  • 本主题中的步骤需要您连接到 Office 365 PowerShell。有关说明,请参阅连接到 Office 365 PowerShell

  • 使用 Get-MsolAccountSku 和 (Get-MsolAccountSku | where {$_.AccountSkuId -eq '<AccountSkuId>'}).ServiceStatus 命令可以找到以下信息:

    • 您的组织中提供的许可计划。

    • 每个许可计划中提供的服务以及列出它们的顺序(索引号)。

    有关许可计划、许可证和服务的详细信息,请参阅使用 Office 365 PowerShell 查看许可证和服务

  • 使用命令 Get-MsolUser -UserPrincipalName <Account> | Format-List DisplayName,Licenses 查找指派给用户的许可证以及列出这些许可证的顺序(索引号)。

  • 如果您使用 Get-MsolUser cmdlet 而无需使用 All 参数,仅可返回前 500 个帐户。

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

若要查看用户有权访问的所有 Office 365 PowerShell 服务,请使用以下语法:

(Get-MsolUser -UserPrincipalName <Account>).Licenses[<LicenseIndexNumber>].ServiceStatus

此示例演示用户 BelindaN@litwareinc.com 有权访问的服务。这将显示与向她的帐户分配的所有许可证相关联的服务。

(Get-MsolUser -UserPrincipalName belindan@litwareinc.com).Licenses.ServiceStatus

本示例说明了用户 BelindaN@litwareinc.com 使用向她的帐户(索引号是 0)分配的第一个许可证有权访问的服务。

(Get-MsolUser -UserPrincipalName belindan@litwareinc.com).Licenses[0].ServiceStatus

若要查找已启用或未启用特定服务的所有授权用户,请使用下面的语法:

Get-MsolUser -All | where {$_.isLicensed -eq $true -and $_.Licenses[<LicenseIndexNumber>].ServiceStatus[<ServiceIndexNumber>].ProvisioningStatus <-eq | -ne> "Disabled" -and $_.Licenses[<LicenseIndexNumber>].ServiceStatus[<ServiceIndexNumber>].ProvisioningStatus <-eq | -ne> "Disabled"...}

这些示例使用下面的信息:

  • 有权访问我们感兴趣的 Office 365 服务的许可证是向所有用户分配的第一个许可证(索引号为 0)。

  • 我们感兴趣的 Office 365 服务是 Skype for Business Online 和 Exchange Online。对于与许可计划相关联的许可证,Skype for Business Online 是第 5 个被列出的服务(索引号为 4),Exchange Online 是第 8 个被列出的服务(索引号为 7)。

此示例返回所有启用了 Skype for Business Online 和 Exchange Online 的已授权用户。

Get-MsolUser -All | where {$_.isLicensed -eq $true -and $_.Licenses[0].ServiceStatus[4].ProvisioningStatus -ne "Disabled" -and $_.Licenses[0].ServiceStatus[7].ProvisioningStatus -ne "Disabled"}

此示例返回所有未启用 Skype for Business Online 或 Exchange Online 的已授权用户。

Get-MsolUser -All | where {$_.isLicensed -eq $true -and $_.Licenses[0].ServiceStatus[4].ProvisioningStatus -eq "Disabled" -and $_.Licenses[0].ServiceStatus[7].ProvisioningStatus -eq "Disabled"}

返回顶部

了解已向哪些用户签发 Office 365 许可证及哪些用户尚未被签发,这非常重要。(有关详细信息,请参阅文章使用 Office 365 PowerShell 查看授权和未授权的用户。)然而,仅拥有 Office 365 许可证并不能使您了解用户实际上可以使用 Office 365 来做些什么。他/她是否可以使用 Exchange Online 或 Skype for Business Online?此用户是否可以访问 SharePoint Online?他/她是否拥有 Office Professional Plus 的访问权限?拥有许可证只是意味着用户有可能访问这些服务。但是,提供给用户的功能取决于针对他/她的许可证已启用的服务。

那么,我们如何确定用户具有哪些 Office 365 功能的访问权限?为此,我们需要运行一个与此类似的命令:

Get-MsolUser -UserPrincipalName BelindaN@litwareinc.com | Select-Object -ExpandProperty Licenses | Select-Object -ExpandProperty ServiceStatus

在此命令中,我们使用 Get-MsolUser cmdlet 返回有关帐户 BelindaN@litwareinc.com 的信息。一旦返回了此信息,我们就能通过管道将帐户数据传递到 Select-Object cmdlet,并让 Select-Object“扩展”Licenses 属性的值:

Select-Object -ExpandProperty Licenses

我们为什么要这样做?默认情况下,Licenses 属性只会告诉我们,Belinda 的许可证所出自的许可包的名称:

Licenses
--------
{litwareinc:ENTERPRISEPACK}

“扩展”Licenses 属性为我们提供了更多的一些信息:

ExtensionData     AccountSku       AccountSkuId ServiceStatus
-------------     ----------       ------------ -------------
System.Runtime... Microsoft.On...  litwarein... {Microsoft.Online.A...

然后,通过扩展 ServiceStatus 属性我们可以获得更多的信息:

 

服务计划 描述

SWAY

Sway

INTUNE_O365

Office 365 移动设备管理

YAMMER_ENTERPRISE

Yammer

RMS_S_ENTERPRISE

Azure 权限管理 (RMS)

OFFICESUBSCRIPTION

Office Professional Plus

MCOSTANDARD

Skype for Business Online

SHAREPOINTWAC

Office Online

SHAREPOINTENTERPRISE

SharePoint Online

EXCHANGE_S_ENTERPRISE

Exchange Online 计划 2

注释注意:
您觉得要键入的内容过多?如果您可以忍受 Windows PowerShell 存在一点延迟,您可以运行命令的此压缩版本:
(Get-MsolUser -UserPrincipalName BelindaN@litwareinc.com).Licenses[0].ServiceStatus

为清楚说明,我们可以“扩展”Licenses 属性,这是由于 Licenses 是一个多值属性:即可以存储多个值的单个属性。我们在扩展属性值时,只需深入了解以获取这些默认情况下不会在屏幕上显示的其他值。

注释注意:
您如何了解一个值是多值属性?若要了解清楚,请尝试运行与以下类似的命令:
Get-MsolUser -UserPrincipalName BelindaN@litwareinc.com | Get-Member
Get-member cmdlet 将返回有关对象本身的信息;本例中是构成用户帐户对象的有关属性值的信息。以下是 Get-Member 返回的 Licenses属性的信息:
Licenses Property System.Collections.Generic.List[Microsoft.On...
如果对集合做出了属性定义(本例中为 System.Collections.Generic.List),您就会知道您处理的是多值属性。

这意味着什么?要回答此问题,首先让我们来看看 Get-MsolUser cmdlet 返回的信息:

ServicePlan                       ProvisioningStatus
-----------                       ------------------
SWAY                              Success
INTUNE_O365                       Success
YAMMER_ENTERPRISE                 PendingInput
RMS_S_ENTERPRISE                  Success
OFFICESUBSCRIPTION                Success
MCOSTANDARD                       Success
SHAREPOINTWAC                     Success
SHAREPOINTENTERPRISE              Success
EXCHANGE_S_ENTERPRISE             Success

我们再来看看一个表格,此表格说明了这些命名奇怪的服务计划真正代表的内容:

 

服务计划 描述

SWAY

Sway

INTUNE_O365

Office 365 移动设备管理

YAMMER_ENTERPRISE

Yammer

RMS_S_ENTERPRISE

Azure 权限管理 (RMS)

OFFICESUBSCRIPTION

Office Professional Plus

MCOSTANDARD

Skype for Business Online

SHAREPOINTWAC

Office Online

SHAREPOINTENTERPRISE

SharePoint Online

EXCHANGE_S_ENTERPRISE

Exchange Online 计划 2

明白了吗?MCOSTANDARD 只是 Skype for Business Online 的内部编程名称,OFFICESUSBCRIPTION 只是 Office Professional Plus 的内部编程名称。这不是最直观的,但只要您在需要时使用此表,在使用 Office 365 服务的过程中就不会出现各种问题。

但等一下,还有一些。正如我们在 使用 Office 365 PowerShell 查看许可证和服务 文章中知道的那样,如果将 ProvisioningStatus 设置为Success,则表示已完全启用该服务;例如,如果将 MCOSTANDARD 设置为 Success,则意味着用户可以访问 Skype for Business Online。如果将 ProvisioningStatus 设置为 PendingInput,则意味着 Office 365 仍在处理服务请求;但是,用户通常可以在该请求完成处理后登录并访问服务。(YAMMER_ENTERPRISE 将始终显示为 PendingInput,但这也没关系:它不会阻止用户登录到 Yammer)。

重要重要说明:
当 OFFICESUBSCRIPTION 处于 PendingInput 状态时,用户可安装并激活一个新的 Office Professional Plus 安装程序。

此外,毋庸置疑,如果服务设置为 Disabled,即意味着所讨论的服务不对用户提供。

返回顶部

在一篇单独的文章中,我们已知道如何使用 Office 365 PowerShell 来禁用用户的服务访问权限。(如果您没有看到这篇文章,请参阅使用 Office 365 PowerShell 禁止访问服务。)这将导致一个明显的问题:有没有办法确定是哪些用户(即多个用户)启用/禁用了哪些服务?

我们希望有人提出这个问题。为了回答这个问题,我们来查看我们第一次在文章使用 Office 365 PowerShell 查看许可证和服务中看到的为我们唯一可用的许可计划 litwareinc:ENTERPRISEPACK 提供的服务表:

 

服务计划 描述

SWAY

Sway

INTUNE_O365

Office 365 移动设备管理

YAMMER_ENTERPRISE

Yammer

RMS_S_ENTERPRISE

Azure 权限管理 (RMS)

OFFICESUBSCRIPTION

Office Professional Plus

MCOSTANDARD

Skype for Business Online

SHAREPOINTWAC

Office Online

SHAREPOINTENTERPRISE

SharePoint Online

EXCHANGE_S_ENTERPRISE

Exchange Online 计划 2

您可能还记得,服务计划只不过是产品的内部编程名称;例如,OFFICESUBSCRIPTION 就是 Office Professional Plus 的内部编程名称。如果OFFICESUBSCRIPTION 在用户的服务计划上显示为 SUCCESS,则意味着允许该用户访问 Office Professional Plus。如果将EXCHANGE_S_ENTERPRISE 列为 DISABLED,则意味着用户无法使用 Exchange Online。

重要重要说明:
当 OFFICESUBSCRIPTION 处于 PendingInput 状态时,用户可安装并激活一个新的 Office Professional Plus 安装程序。

现在正是体现服务显示顺序重要性的时刻。Windows PowerShell 向列表中的每个条目都分配了一个索引号。第一项是 0,下一项是 1,依此类推。下表解释了结果:

 

索引号 服务计划

0

INTUNE_O365

1

YAMMER_ENTERPRISE

2

RMS_S_ENTERPRISE

3

OFFICESUBSCRIPTION

4

MCOSTANDARD

5

SHAREPOINTWAC

6

SHAREPOINTENTERPRISE

7

EXCHANGE_S_ENTERPRISE

正如您知道的,INTUNE_O365 是列出的第一个服务,因此可获取分配的索引号 0。

警告警告:
为什么是 0 而不是 1?这与编程有关。在编程语言中,索引将告诉您某个项与阵列开头“偏离”多远。第一个项阵列开头,因此偏离为 0。第二个项距离阵列 1 个项目,因此偏离为 1。

我们来尝试一个示例。假设我们希望列出尚未启用 Exchange Online 的所有许可用户。为此,可以使用以下命令:

Get-MsolUser | Where-Object {$_.isLicensed -eq $true -and $_.Licenses[0].ServiceStatus[7].ProvisioningStatus -eq "Disabled"}

不可否认,这个命令看起来有点难懂,现在我们将花一分钟时间解释一下它的工作原理。这实际上是一个分为两个部分的命令,第一个部分非常简单:我们使用 Get-MsolUser cmdlet 返回所有 Office 365 用户的集合(包括许可用户和未许可用户):

Get-MsolUser

然后此信息将传送到 Where-Object cmdlet。Where-Object 浏览所有用户帐户并查找满足以下两个条件的帐户:

  • isLicensed 属性等于 (-eqTrue ($true)。这样即可淘汰未许可用户。

  • Licenses[0].ServiceStatus[7].ProvisioningStatus 属性的值等于 (-eqDisabled。为了立即达到我们的目的,这个不实用的属性名称的重要部分如下:

    ServiceStatus[7]

    [7] 表示 Exchange Online 的索引号。(通过几分钟之前查看表格得知。)如果我们要查找启用了 Skype for Business Online 的所有用户,应该如何操作?Skype for Business Online 的索引号为 4,因此我们可使用以下语法:

    ServiceStatus[4]

    等等。

    顺便说一下,Licenses[0] 指示我们想要查看的许可计划。由于我们的测试域仅包含一个许可计划,因此这无关紧要。但是,假定我们有一个用户分配了两个不同许可计划中的许可证。在这种情况下,Licenses[0] 表示第一个许可计划,Licenses[1] 表示第二个许可计划。

    若要查找分配给用户的许可证以及列出它们的顺序,请运行以下命令:

    Get-MsolUser -UserPrincipalName <Account> | Format-List DisplayName,Licenses
    

您是否明白了这一切如何运行?Office Professional Plus 的索引号为 3;因此,此命令将返回尚未启用 Office Professional Plus 的所有用户的列表:

Get-MsolUser | Where-Object {$_.isLicensed -eq $true -and $_.Licenses.ServiceStatus[3].ProvisioningStatus -eq "Disabled"}

如果我们需要已启用Office Professional Plus 的用户列表,应该如何操作?如果您已启用,则 ServiceStatus 将为 PendingInput 或 Success;换句话说,您的 ServiceStatus 将为 equal (-neDisabled。这意味着我们需要执行的操作就是提取前一个命令,并将 -eq 运算符替换为 -ne运算符:

Get-MsolUser | Where-Object {$_.isLicensed -eq $true -and $_.Licenses.ServiceStatus[3].ProvisioningStatus -ne "Disabled"}

俗话说,代码通常很难获胜。而实际上,代码可以更加复杂。例如,假设我们要查看启用了 Skype for Business Online 和 Exchange Online 的用户:

Get-MsolUser | Where-Object {$_.isLicensed -eq $true -and $_.Licenses.ServiceStatus[4].ProvisioningStatus -ne "Disabled" -and $_.Licenses.ServiceStatus[7].ProvisioningStatus -ne "Disabled"}

请不要对粗糙的外观过于担心:重要的是,只需费一点力气,就可以检索此信息。无法使用 Office 365 管理中心获取此相同信息?理论上来说是的,但在实际应用中并非如此。要使用 Office 365 管理中心获取此相同信息,您需要查看每个用户的许可信息,一次只能查看一个用户,然后手动跟踪已启用/未启用 X 的用户。这样是可行的,但老实说:如果您具有 10 或 11 个以上的用户,您就不会执行此操作了。这样太繁琐、太耗时。

当然,这就是为什么我们需要 Windows PowerShell:Windows PowerShell 可帮助您从这些繁琐、耗时的任务中解脱出来。

下面是用于查看服务信息的最终命令:

Get-MsolUser | Select-Object DisplayName, @{Name="MDM";Expression={$_.Licenses[0].ServiceStatus[0].ProvisioningStatus}}, @{Name="Yammer";Expression={$_.Licenses[0].ServiceStatus[1].ProvisioningStatus}}, @{Name="AD RMS";Expression={$_.Licenses[0].ServiceStatus[2].ProvisioningStatus}}, @{Name="OfficePro";Expression={$_.Licenses[0].ServiceStatus[3].ProvisioningStatus}}, @{Name="Skype";Expression={$_.Licenses[0].ServiceStatus[4].ProvisioningStatus}}, @{Name="OfficeWeb";Expression={$_.Licenses[0].ServiceStatus[5].ProvisioningStatus}}, @{Name="SharePoint";Expression={$_.Licenses[0].ServiceStatus[6].ProvisioningStatus}}, @{Name="Exchange";Expression={$_.Licenses[0].ServiceStatus[7].ProvisioningStatus}} | ConvertTo-Html > "C:\My Documents\Service Info.html"

是的,此命令看起来很奇怪。但它会创建一个 CSV 文件,显示您的所有用户及其所有服务状态。

返回顶部

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值