您的位置:首页 > 运维架构 > Shell

使用 Office 365 PowerShell 管理用户帐户和许可证(三)使用 Office 365 PowerShell 向用户帐户分配许可证

2017-05-16 14:56 736 查看


使用 Office 365 PowerShell 向用户帐户分配许可证

 

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

介绍如何使用 Office 365 PowerShell 向未授权用户分配 Office 365 许可证。

在 Office 365 中,用户帐户授权显得非常重要,因为在用户帐户获得授权之前,他们无法使用任何 Office 365 服务。您可以使用 Office 365 PowerShell 以有效地将许可证分配给未授权的帐户,尤其是多个帐户。

目录:

简版(说明不含解释)

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

另请参阅


开始之前



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

使用 Get-MsolAccountSku cmdlet 可查看组织中可用的许可计划以及每个计划的可用许可证数量。每个计划中的可用许可证数量为ActiveUnits - WarningUnits - ConsumedUnits。有关许可计划、许可证和服务的详细信息,请参阅使用
Office 365 PowerShell 查看许可证和服务。

若要在您的组织中查找未授权帐户,请运行命令 
Get-MsolUser -All -UnlicensedUsersOnly


可以仅向 UsageLocation 属性设置为由 2 个字母组成的有效 ISO 3166-1 国家(地区)代码的用户帐户分配许可证。例如,US 代表美国,FR
代表法国。某些 Office 365 服务在特定的国家/地区不可用。有关详细信息,请参阅关于许可限制

若要查找没有 UsageLocation 值的帐户,请运行命令 
Get-MsolUser
-All | where {$_.UsageLocation -eq $null}
。若要在帐户上设置UsageLocation 值,请使用语法 
Set-MsolUser
-UserPrincipalName "<Account>" -UsageLocation <CountryCode>
。例如,
Set-MsolUser
-UserPrincipalName "belindan@litwareinc.com" -UsageLocation US


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


简版(说明不含解释)



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

若要向一个用户分配许可证,请在 Office 365 PowerShell 中使用以下语法:

Set-MsolUserLicense -UserPrincipalName "<Account>" -AddLicenses "<AccountSkuId>"


本示例向未授权用户 
belindan@litwareinc.com
 分配 
litwareinc:ENTERPRISEPACK
 (Office
365 企业版 E3) 许可计划中的许可证。

Set-MsolUserLicense -UserPrincipalName "belindan@litwareinc.com" -AddLicenses "litwareinc:ENTERPRISEPACK"


若要向多个未授权用户分配许可证,请使用以下句法:

$x = Get-MsolUser -All -UnlicensedUsersOnly [<FilterableAttributes>]; $x | foreach {Set-MsolUserLicense -AddLicenses "<AccountSkuId>"}


注释

您无法使用相同的许可计划为用户分配多个许可证。

如果没有足够可用的许可证,将按照 Get-MsolUser cmdlet 返回的顺序为用户分配许可证,直到可用许可证用尽。

本示例向所有未授权用户分配 
litwareinc:ENTERPRISEPACK
 (Office 365 企业版 E3) 许可计划中的许可证。

$AllUn = Get-MsolUser -All -UnlicensedUsersOnly; $AllUn | foreach {Set-MsolUserLicense -AddLicenses "litwareinc:ENTERPRISEPACK"}


本示例向美国销售部门的未授权用户分配这些相同的许可证。

$USSales = Get-MsolUser -All -Department "Sales" -UsageLocation "US" -UnlicensedUsersOnly; $USSales | foreach {Set-MsolUserLicense -AddLicenses "litwareinc:ENTERPRISEPACK"}


返回顶部


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



如文章 使用
Office 365 PowerShell 查看授权和未授权的用户中所说明的,用户可以具有有效的 Office 365 用户帐户,但不为其签发 Office 365 许可证。这意味着无论是否具有有效帐户,这些用户都无法登录到 Office 365。如果您无法登录,则不能利用 Office 365 服务的任何优势。

上述文章还说明了我们可以通过运行此命令返回未许可用户帐户的列表:

Get-MsolUser -All -UnlicensedUsersOnly


此命令将返回有关当前未经 Office 365 许可的任何用户的信息:

UserPrincipalName           DisplayName                     isLicensed
-----------------           -----------                     ----------
BelindaN@litwareinc.com     Belinda Newman                  False


正如您所见,我们有一个未许可用户:Belinda Newman。那么,我们如何为 Belinda 分配一个 Office 365 许可证?

对于初学者,我们将运行使用
Office 365 PowerShell 查看许可证和服务一文中讨论的 Get-MsolAccountSku cmdlet:

Get-MsolAccountSku


此命令将返回类似于以下的数据:

AccountSkuId               ActiveUnits    WarningUnits   ConsumedUnits
------------               -----------    ------------   -------------
litwareinc:ENTERPRISEPACK  25             0              24


为什么我们要运行 Get-MsolAccountSku?(先解释一下,“Sku”是“stock-keeping unit”的简称,名为库存单位。对于我们来说,这只是“产品”的一个业务术语。)我们运行 Get-MsolAccountSku 有两个原因。首先,我们需要确保确实有许可证可分配给
Belinda。那么我们是否有可分配给 Belinda 的许可证?为了确定这一点,我们假设 ActiveUnits 属性的值为 25,并用该值减去 WarningUnits 和 ConsumedUnits 属性的值,分别为
0 和 24:

25 - 0 - 24 = 1


ActiveUnits 属性显示我们已购买的许可证数量,WarningUnits 和 ConsumedUnits 的组合值显示当前使用的许可证数量。如果将已购买的许可证数量减去已签发的许可证数量,就能知道仍可用的许可证数量。很幸运,我们还有一个可供分发的许可证:

25 - 0 - 24 = 1


其次,要向 Belinda 分配新的许可证,我们需要知道许可计划的名称(即我们需要知道 AccountSkuId)。在这种情况下,一切就变得很简单:我们只有一个许可计划 (
litwareinc:ENTERPRISEPACK
)。但请注意,组织可以具有多个许可计划。在这种情况下,Get-MsolAccountSku 将返回两个不同的 AccountSkuIds,您将需要在分配许可证时选择相应的许可计划。尽管如此,现在我们将要坚持执行最简单的案例,并假定我们只有一个许可计划。

因此,我们如何为 Belinda Newman 分配新的许可证?如下:

Set-MsolUserLicense -UserPrincipalName "BelindaN@litwareinc.com" -AddLicenses "litwareinc:ENTERPRISEPACK"


您还必须执行此操作:只需调用 Set-MsolUserLicense cmdlet,确保为用户和相应的许可计划指定了 UserPrincipalName 参数。

当 Set-MsolUserLicense 结束运行时,您会在屏幕上看到类似于以下的内容:

PS C:\windows\system32>


换句话说,看起来好像什么也没发生。要确认已向用户分配许可证,请运行与下面类似的命令:

Get-MsolUser -UserPrincipalName "BelindaN@litwareinc.com"


如果一切按预期运行,您应该会看到 Belinda 的 isLicensed 属性现在设置为 True:

UserPrincipalName           DisplayName                     isLicensed
-----------------           -----------                     ----------
BelindaN@litwareinc.com     Belinda Newman                  True



安全性
注意:
好问题:如果您犯了一个错误,尝试将许可证分配给已有许可证的用户,会怎么样?最终能否将两个许可证授予给单个用户?

快速回答?否,Office 365 不允许您将多个许可证分配给同一个用户。(即同一个许可计划的多个许可证。)如果您尝试执行此操作,您的命令将失败,并显示以下错误消息:
Set-MsolUserLicense : Unable to assign this license because it is invalid. Use the Get-MsolAccountSku cmdlet to retrieve
a list of valid licenses.
 

不可否认,此错误消息存在误导性:许可证并非真的无效,只是被分配给了已有许可证的用户。但是,尽管会出现错误消息,但一个用户最后不会被分配多个许可证,这一点很重要。
正如您所看到的,使用 Office 365 PowerShell 将单个许可证分配给单个用户非常简单。这将导致一个明显的问题:使用 Office 365 管理中心将单个许可证分配给单个用户是否与此一样简单,甚至更加简单?有可能;这部分取决于您更习惯于使用 Windows PowerShell 还是 Office 365 管理中心。但是,当您需要将多个许可证分配给多个用户时,Windows PowerShell 将非常有用。例如,此命令会将 Office 365 许可证分配给尚没有许可证的任何用户:

Get-MsolUser -All -UnlicensedUsersOnly | Set-MsolUserLicense -AddLicenses "litwareinc:ENTERPRISEPACK"


在前面的命令中,我们使用 Get-MsolUser 和 UnlicensedUsersOnly 参数返回所有未授权用户帐户的集合。然后我们将该集合传递给 Set-MsolUserLicense cmdlet;反过来,Set-MsolUserLicense 将许可证(从 
litwareinc:ENTERPRISEPACK
 许可计划中获得)分配给集合中的每个用户。

但是,如果您有 5 个未授权用户,但只有一个可用的许可证,应该如何操作呢?在这种情况下,Set-MsolUserLicense 会将可用许可证授予给 Get-MsolUser 返回的第一个用户。然后 Set-MsolUserLicense 会忠实地尝试将许可证分配给其他四个用户,但这些尝试都将失败,并返回以下错误消息:

Set-MsolUserLicense : Unable to assign this license because the number of allowed licenses have been assigned.


换句话说,Set-MsolUserLicense 不会只是失败。相反,它将尽可能多地分配许可证。只有在这个时候才会失败。

我们来尝试另一个示例。您可能想要将许可证分配给销售部门的所有用户。没有问题:

Get-MsolUser -All -Department "Sales" | Set-MsolUserLicense -AddLicenses "litwareinc:ENTERPRISEPACK"


或者,如果您想要来点新奇的,想将错误消息和计算处理保持在最低水平,只需将许可证分配给销售部门中的未许可用户。

Get-MsolUser -All -Department "Sales" -UnlicensedUsersOnly | Set-MsolUserLicense -AddLicenses "litwareinc:ENTERPRISEPACK"


总而言之,不会尝试向已有许可证的用户分配许可证。正如我们所见,这不会成功。

下面是另一个示例。您可能希望向当前没有 Office 365 许可证的所有美国用户分配许可证。在这种情况下:

Get-MsolUser -All -UsageLocation "US" -UnlicensedUsersOnly | Set-MsolUserLicense -AddLicenses "litwareinc:ENTERPRISEPACK"


等等。


注意:
运行一个命令需要多长时间?比方说,将许可证分配给您所有的未授权用户。这很难说:它取决于从您的用户数量到网络连接速度等各个方面。如果您只有几百个要授权的用户,那么理所当然这会非常快(即应该不超过一到两分钟)。如果您有 10,000 个要授权的用户,显然时间会长一点。但这远不及使用 Office 365 管理中心向 10,000 个用户分配许可证所需的时间。
讨论这个话题时,在分配许可证时需要注意以下事项:如果用户没有为 UsageLocation 属性配置值,您将无法向该用户分配 Office 365 许可证。相反,您将收到一个与以下类似的错误消息:

Set-MsolUserLicense : You must provide a required property: Parameter name: UsageLocation


此错误消息以一种比较婉转的方式告诉我们,没有为所说的用户分配 UsageLocation。正如您可能已经猜到的,UsageLocation 属性(指示通常使用
Office 365 的用户所在地区或国家)极其重要。为什么呢?因为对用户可用的服务不仅取决于您购买的授权包,还取决于用户所在的位置:按照当地法规,某些用户可能无法使用某些服务。如果用户没有 UsageLocation,Office
365 将无法知道哪些服务对该用户可用且合法。因此,Office 365 无法将任何服务提供给该用户,至少在指定 UsageLocation 之前无法提供。


注意:
当您配置用户帐户时,如果存在与世界特定位置相关的任何许可证限制,您会立即得知。例如,如果您将某个许可用户的 UsageLocation 更改为伊朗 (
IR
),命令将失败并显示错误消息:
Set-MsolUser : Unable to update license for this user. One or more of the assigned service plans is not available
in this user's country. Prohibited Service Plans: EXCHANGE_S_ENTERPRISE, SHAREPOINTENTERPRISE, SHAREPOINTWAC, MCOSTANDARD, OFFICESUBSCRIPTION, RMS_S_ENTERPRISE. Specific service plans can be disabled for a user by using the licenseoptions parameter.
 

这是因为 Office 365 当前对伊朗的用户不可用。有关详细信息,请参阅关于许可证限制

顺便说一下,Office 365 使用国际标准组织 (ISO) 生成的两位字母的国家代码。您可以在 ISO
网站上找到这些代码。
如果您想确认指定用户具有 UsageLocation,您可以使用与此类似的命令:

Get-MsolUser -UserPrincipalName "BelindaN@litwareinc.com" | Select-Object UsageLocation


或者,您可以使用此命令,返回不具有 UsageLocation 的所有用户的列表:

Get-MsolUser -All | Where-Object {$_.UsageLocation -eq $null}



注意:
当您向用户分配许可证后,用户默认将有权访问您的组织有权访问的所有 Office 365 服务。例如,如果您购买了 Office 365 企业版 E3 的许可证,您新授权的用户将自动获取访问服务的权限,如 Exchange Online、Skype for Business Online 和 SharePoint Online。如果您希望限制用户访问这些服务(例如,您可能希望用户能够访问 SharePoint Online,但不能访问
Exchange Online 和 Skype for Business Online),可参阅文章使用
Office 365 PowerShell 禁止访问服务。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐