我正在研究连接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循环进行迭代
答案 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;