使用csv在具有powershell的office 365中分配许可证

使用csv在具有powershell的office 365中分配许可证,powershell,csv,office365,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) { $F

所以我试图在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 msoluseralicense
命令进行以下修改

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

语法
$SKU,$SKU
生成分配给每个变量的值数组。使用
@($SKU,$SKU)
生成类似的输出。当数组通过管道(
|
)传输到
Where Object
中时,该数组中的每个对象都将成为当前管道对象(
$\u
$PSItem
)。对象执行比较或条件检查时,
的脚本块(
{}
)内容。在这种情况下,
$将作为
布尔值进行计算,以查看它是否返回
True
False
。如果返回
True
,则将返回该对象。否则,将不会返回该对象。在表达式周围使用
()
,可以将整个输出立即返回到
-AddLicenses
参数



有关使用
Where-Object
及其脚本块语法的更多信息,请参见如果我将```($SKU,$SKU | Where Object{$_Licenses-eq”“}运行良好。已分配许可证的用户,但已分配空白许可证且未分配任何内容的用户您只需将其保留在
Where Object{$}
。当
$SKU,$SKU
通过管道输送到
Where对象
时,这些对象中的每一个一次变为
$\u
一个。如果它们不为null且不包含空值,则该对象的Where条件将计算为true,并且仅输出该对象。结果是一个包含非空值的字符串对象数组。这很有效。我一整天都在尝试自己对其进行排序,非常感谢:)