有不同的方法可以做到这一点,我将向您展示两种不同的方法。我个人认为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
}
以以下数组为例:
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
}