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

时间:2019-07-10 09:30:29

标签: powershell office365

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

现在,我需要删除与用户无关的多个许可证。这样的许可证列表将出现在字符串变量中。

如果我事先知道许可证的名称,这就是命令的外观:

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

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

但是,这不是我想使其动态化的方式,我将直接将许可证传递给变量

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

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

反引号是powershell中的转义字符,因此我在反引号中转义了应作为文本一部分的双引号

现在,如果我使用此

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

这使我出错

  

Set-MsolUserLicense:无法分配此许可证,因为它是   无效。使用Get-MsolAccountSku cmdlet检索有效列表   许可证。

我也尝试过这种方式:

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

有效。

同样,这不是一种动态方法,因为可能会发生两个以上的许可证。

如果有任何想法可以解决此问题,请提供帮助。 我也不想分割字符串并通过for循环进行迭代

1 个答案:

答案 0 :(得分:0)

看来我做错了方向。

在使用-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;