0

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

上一页 许可证类型
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 并分配不同类型的许可证。

4

2 回答 2

0

有不同的方法可以做到这一点,我将向您展示两种不同的方法。我个人认为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
}
于 2021-07-02T03:49:22.160 回答
0

在 CSV 文件中保持用户的 UPN 由新行分隔,没有标题,然后下载以下脚本。该脚本可以执行 6 个以上的许可证管理活动,包括批量分配或删除许可证。

https://o365reports.com/2021/11/23/office-365-license-reporting-and-management-using-powershell/

在此处输入图像描述

于 2021-11-24T07:55:25.197 回答