powershell - Office365 - 同时删除多个许可证无法按预期工作
问题描述
我正在编写一个连接 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 :无法分配此许可证,因为它无效。使用 Get-MsolAccountSku cmdlet 检索有效许可证的列表。
我也尝试过这样做:
$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;
推荐阅读
- tableau-api - 在每个图像旁边动态显示 wiki 内容
- flutter - 如何在 Flutter 中随 Chip inside Wrap 一起缩放芯片布局框
- javascript - 关于javascript中关键字THIS的问题
- r - 为向量或列中的每个元素创建新的小标题
- mongodb - mongodb 中 $match 和 request.params.id 的问题
- javascript - 单击导航项后导航覆盖不会关闭
- cloudinary - 使用 REST full api 从 Cloudinary 中删除图像
- amazon-web-services - 如何将根域指向 Elastic Beanstalk?
- node.js - 终端不断给出错误:'node: --experimental-workerexport is not allowed in NODE_OPTIONS'
- node.js - Node.js 和 MongoDb 中的队列机制