Office365 - 同时删除多个许可证无法按预期工作

Office365 - removing multiple licenses at the same time doesn't work as expected

我正在编写连接 O365 环境并删除许可证的脚本。

现在我需要删除多个与用户不再相关的许可证。此类许可证的列表将出现在字符串变量中。

如果我事先知道许可证的名称,命令将如下所示:

Set-MsolUserLicense -UserPrincipalName "ID_TestB@lic.com" -RemoveLicenses "liconline:DESKLESSPACK","liconline:OFFICESUBSCRIPTION";

以上命令将删除两个许可证,即 desklesspack 和 officesubscription 供使用 ID_TestB@lic.com(注意每个许可证名称中的双引号)

但事情不会是这样,因为我想让它动态化,我会将许可证直接传递给变量

所以现在如果我在一个变量中捕获这些许可证,假设是 $license,其中 $license 是

$license="`"liconline:DESKLESSPACK`",`"liconline:OFFICESUBSCRIPTION`""

反引号是 powershell 中的转义字符,所以我用反引号转义了双引号,这应该是文本的一部分

现在如果我使用这个

Set-MsolUserLicense -UserPrincipalName "ID_TestB@lic.com" -RemoveLicenses $license;

这会给我一个错误

Set-MsolUserLicense : Unable to assign this license because it is invalid. Use the Get-MsolAccountSku cmdlet to retrieve a list of valid licenses.

我也试过这样做:

$license1 = "liconline:DESKLESSPACK";
$license2 = "liconline:OFFICESUBSCRIPTION";
Set-MsolUserLicense -UserPrincipalName "ID_TestB@licent.com" -RemoveLicenses $license1, $license2;

有效。

同样,这不是动态方法,因为它可能会发生超过两个许可证。

如果有人知道这可以工作,请提供帮助。 我也不想拆分字符串并通过 for 循环迭代

看来我做错了。

虽然使用 -RemoveLicenses 开关 Powershell 需要字符串数组而不是字符串,但我将逗号分隔的双引号解释为导致问题的字符串。

所以解决方案是:

$license="licentonline:DESKLESSPACK","licentonline:OFFICESUBSCRIPTION"
#powershell will automatically convert above string to an array
Set-MsolUserLicense -UserPrincipalName "ID_TestB@licent.com" -RemoveLicenses $license;