powershell - 使用 csv 通过 powershell 在 office 365 中分配许可证

标签 powershell csv office365

所以我正在尝试在 csv 文件中为用户分配许可证。有些用户将拥有超过 1 个许可证,例如 powerbi pro、e3。问题是如果用户不需要两个许可证,csv 文件中的字段将留空,这会导致我的代码出错

这是我的 Powershell 代码

Connect-MSOLService
    $users = Import-csv 'C:\User Creation\ADUsers.csv'-delimiter ","
    foreach ($user in $users)
    {
        $Firstname = $User.Firstname
        $Lastname   = $User.Lastname
        $upn= "$Firstname.$Lastname@domain.com"
        $usagelocation= $user.Usagelocation
        $SKU= $user.License
        $SKUS= $user.Licenses
        Set-MsolUser -UserPrincipalName $upn -UsageLocation $usagelocation 
        Set-MsolUserLicense -UserPrincipalName $upn -AddLicenses $SKU,$SKUS
 }

任何帮助将不胜感激。 如果 csv 字段填充了有效许可证,则工作正常,但当它为空时会出错。我试过使用 if 语句

 {if($user.Licenses -eq "") {$user.Licenses="domain:POWER_BI_STANDARD"}

还是报错

最佳答案

您可以对Set-MsolUserLicense 命令进行如下修改。

Set-MsolUserLicense -UserPrincipalName $upn -AddLicenses ($SKU,$SKUS | Where-Object {$_})

解释:

语法 $SKU,$SKUS 生成一个值数组,这些值分配给每个变量。使用 @($SKU,$SKUS) 生成类似的输出。当数组通过管道传输 (|) 到 Where-Object 时,该数组中的每个对象都成为当前管道对象($_$PSItem). Where-Object 的脚本 block ({}) 内容执行比较或条件检查。在这种情况下,$_ 将被评估为一个 boolean 以查看它是否返回 TrueFalse。如果它返回 True,则将返回该对象。否则,将不返回该对象。在表达式周围使用 (),允许将整个输出立即返回到 -AddLicenses 参数。


参见 Where-Object有关使用 Where-Object 及其脚本 block 语法的更多信息

关于powershell - 使用 csv 通过 powershell 在 office 365 中分配许可证,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57431195/

相关文章:

azure - 如何在 Azure Blob 存储中覆盖后命名 csv 文件

azure - 适用于逻辑应用程序的 ARM 模板 Office 365 连接

sharepoint - 通过 Java 访问 Office 365 Sharepoint Web 服务 - Axis2

windows - 在远程桌面上使用 Powershell 获取 Windows DisplayLanguage

linux - 如何通过迭代包含服务器列表的文本文件来查找 Linux 服务器的空间

Powershell - 将输出连接到 csv 文件

java - 创建 CSV 文件而不将其保存到文件系统中

powershell - 如何使用 Powershell Commandlet 在应用服务环境中创建 Azure WebApp

csv - JMeter |如何在通过 CSV 数据集配置进行参数化时引入双引号

azure - 如何将我的 MSDN Azure 权益链接到特定的 Office 365 租赁