所以我正在尝试在 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
以查看它是否返回 True
或 False
。如果它返回 True
,则将返回该对象。否则,将不返回该对象。在表达式周围使用 ()
,允许将整个输出立即返回到 -AddLicenses
参数。
参见 Where-Object有关使用 Where-Object
及其脚本 block 语法的更多信息
关于powershell - 使用 csv 通过 powershell 在 office 365 中分配许可证,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57431195/