微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

是否可以使用 csv 文件通过 Powershell 分配 Office365 许可证?

如何解决是否可以使用 csv 文件通过 Powershell 分配 Office365 许可证?

在这里要做的是将特定许可证分配给特定帐户,这是从 csv 文件提取的。我有一些脚本可以批量分配,但一次只能分配一种许可证类型。我想要的是更精细的控制和批量分配多个许可证类型的 csv 是这样的:

upn 许可证类型
testuser1@testdomain.com 微软 365 E3
testuser2@testdomain.com 微软 365 E5
testuser3@testdomain.com 微软 365 E3
testuser4@testdomain.com 微软 365 F3

upn (userprincipalname) 和许可类型是列标题。每个指定的用户在其所在的行中被分配了特定的许可。

据我所知,我可以做到:

Get-MsolAccountSku

这将为我提供所有现有的许可证类型,我可以记下我需要的特定许可证的 SkuId,例如它是 testtenant:SPE_E3 ,然后我可以执行以下操作:

users = import-csv ".\bulkassignlicenses.csv"
foreach ($user in $users)
{
    $upn=$user.UserPrincipalName
    $SKU= "testtenant:SPE_E3"
    Set-Msoluser -UserPrincipalName $upn 
    Set-MsoluserLicense -UserPrincipalName $upn -AddLicenses $SKU
    Write-Host "License Assigned to UPN:"$upn 
} 

问题是这只会为 csv 文件中列出的用户分配一种类型的许可证,我不知道如何让它遍历 CSV 并分配不同类型的许可证。

解决方法

您可以通过多种不同的方式来做到这一点,我将向您展示 2 种不同的方式。我个人认为在这种情况下 Group-Object 是更优雅的解决方案。

我假设您已经知道所有可用的许可证,并且这些许可证已经硬编码(没有拼写错误)在 CSV 中。

以以下数组为例:

PS /> $users

upn                           license        
---                           -------        
user.example01@testdomain.com ExampleLicense3
user.example02@testdomain.com ExampleLicense1
user.example01@testdomain.com ExampleLicense1
user.example02@testdomain.com ExampleLicense1
user.example03@testdomain.com ExampleLicense3
user.example01@testdomain.com ExampleLicense3
user.example02@testdomain.com ExampleLicense2
user.example01@testdomain.com ExampleLicense3
user.example03@testdomain.com ExampleLicense1
user.example03@testdomain.com ExampleLicense1
user.example03@testdomain.com ExampleLicense1

作为参考,这是分组后数组的外观:

Count Name                      Group                                                                                                                                     
----- ----                      -----                                                                                                                                     
    4 user.example01@testdom... {@{upn=user.example01@testdomain.com; license=ExampleLicense3},@{upn=...
    3 user.example02@testdom... {@{upn=user.example02@testdomain.com; license=ExampleLicense1},@{upn=...
    4 user.example03@testdom... {@{upn=user.example03@testdomain.com; license=ExampleLicense3},@{upn=...

代码:

$users | Group-Object upn | ForEach-Object {
    # Note: $_.Group.License may or may not be an array.
    # Since -AddLicenses can take string[] as input this shouldn't be a problem
    Set-MsolUserLicense -UserPrincipalName $_.Name -AddLicenses $_.Group.License
}
  • 选项 2:使用 Split

以以下数组为例:

PS /> $users

upn                           license                                                        
---                           -------                                                        
user.example02@testdomain.com ExampleLicense2;ExampleLicense1;ExampleLicense1                
user.example01@testdomain.com ExampleLicense3;ExampleLicense1;ExampleLicense2;ExampleLicense1
user.example03@testdomain.com ExampleLicense3;ExampleLicense2;ExampleLicense3;ExampleLicense2

注意:我使用分号 ; 作为分隔符,但是您应该决定哪个是此示例的正确分隔符。

代码:

$users | ForEach-Object {
    $licenses = $_.license -split ';'
    Set-MsolUserLicense -UserPrincipalName $_.upn -AddLicenses $licenses
}

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。