如何修改PowerShell脚本实现从CSV批量分配指定License?
批量通过CSV处理Azure AD用户许可证的PowerShell脚本修改方案
操作步骤
- 准备CSV文件:先创建一个CSV(比如命名为
user-list.csv),用UPN作为列名存储用户的用户主体名称,示例格式如下:
UPN miguel.santiago@nice.ch jane.doe@nice.ch john.smith@nice.ch
- 脚本修改说明:把原脚本中针对单个用户的逻辑套入
foreach循环即可,同时将固定的许可证配置代码移到循环外(避免重复创建对象浪费资源)。注意原脚本实际是移除许可证,如果你的需求是分配,需要把RemoveLicenses替换为AddLicenses。
修改后的完整脚本
# 读取CSV中的用户列表 $userList = Import-Csv -Path "C:\Your\Path\user-list.csv" # 提前配置许可证信息(SKU固定,只需初始化一次) $targetSkuId = "3b555118-da6a-4418-894f-7df1e2096870" $licenseObj = New-Object -TypeName Microsoft.Open.AzureAD.Model.AssignedLicense $licenseObj.SkuId = $targetSkuId $licenseAssignment = New-Object -TypeName Microsoft.Open.AzureAD.Model.AssignedLicenses # 需求为分配许可证时用AddLicenses,移除则保留RemoveLicenses $licenseAssignment.AddLicenses = $licenseObj # $licenseAssignment.RemoveLicenses = $targetSkuId # 遍历每个用户执行操作 foreach ($userEntry in $userList) { try { # 获取Azure AD用户对象 $adUser = Get-AzureADUser -ObjectId $userEntry.UPN -ErrorAction Stop # 执行许可证操作 Set-AzureADUserLicense -ObjectId $adUser.ObjectId -AssignedLicenses $licenseAssignment -ErrorAction Stop Write-Host "处理成功:$($userEntry.UPN)" -ForegroundColor Green } catch { Write-Host "处理失败 $($userEntry.UPN):$_" -ForegroundColor Red } }
核心修改点
- 用
Import-Csv读取批量用户列表,替代单个UPN变量 - 将许可证对象初始化代码移到循环外,提升执行效率
- 用
foreach遍历CSV中的每一条用户记录 - 增加
try-catch块捕获并输出错误(比如用户不存在、许可证操作失败等场景) - 明确区分分配/移除许可证的配置项,适配不同需求
内容的提问来源于stack exchange,提问作者sanjacob
相关产品推荐
相关产品推荐

