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

Assigning licences in office 365 with powershell using csv

所以我正在尝试在 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 的脚本块 ({}) 内容执行比较或条件检查。在这种情况下,$_ 将被评估为 boolean 以查看它是 returns True 还是 False。如果它 returns True,将返回该对象。否则,将不返回该对象。在表达式周围使用 (),允许将整个输出立即返回到 -AddLicenses 参数。


有关使用 Where-Object 及其脚本块语法的更多信息,请参阅 Where-Object