PowerShell遍历CSV为Teams用户按位置分配通话策略脚本求助
Teams用户通话策略批量分配PowerShell脚本修复
原代码核心问题
- 哈希表内脚本块存在换行断裂的语法错误,USA、UK区域的企业语音开关被误设为
$false,不符合需求 - 未实现UPN有效性校验逻辑
- 缺少要求的基础配置步骤:为所有用户分配对应电话号码、启用企业语音
- 匹配到区域策略后无执行逻辑,未配置位置无匹配时的提示输出
- 脚本块未定义参数入口,直接调用会无法识别
$upn、$phone变量
修复后完整代码
# 登录Microsoft Teams PowerShell环境 Connect-MicrosoftTeams # 配置CSV文件路径,按实际存储位置修改 $csvPath = "C:\Users\admcdg\Desktop\users_all_info_export.csv" $userList = Import-Csv -Path $csvPath # 区域-策略映射表,可按需增删区域和对应策略配置 $policyMappings = @{ USA = { param($upn, $phone) Grant-CsOnlineVoiceRoutingPolicy -PolicyName "Standard-Lab-User-VRP" -Identity $upn } UK = { param($upn, $phone) Grant-CsOnlineVoiceRoutingPolicy -PolicyName "Restricted-Lab-User-PSTN-Usage" -Identity $upn } Asia = { param($upn, $phone) Grant-CsOnlineVoiceRoutingPolicy -PolicyName "All-Inclusive-Lab-User-VRP" -Identity $upn } } foreach ($user in $userList) { # 去除字段前后多余空格,避免空格导致匹配失败 $upn = $user.userprincipalname.Trim() $phone = $user.Phonenumber.Trim() $location = $user.Location.Trim() # UPN有效性校验:非空+符合UPN格式规则 if ([string]::IsNullOrWhiteSpace($upn) -or $upn -notmatch '^[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\.[A-Z|a-z]{2,}$') { Write-Warning "跳过无效UPN记录:$($user | ConvertTo-Json -Compress)" continue } # 第一步:执行所有用户通用基础配置 try { Set-CsPhoneNumberAssignment -Identity $upn -PhoneNumber $phone -PhoneNumberType DirectRouting -ErrorAction Stop Set-CsUser -Identity $upn -EnterpriseVoiceEnabled $true -ErrorAction Stop Write-Host "✅ 用户 $upn 基础配置完成:号码已分配、企业语音已启用" } catch { Write-Error "❌ 用户 $upn 基础配置失败:$($_.Exception.Message)" continue } # 第二步:按位置匹配下发对应区域策略 if ($policyMappings.ContainsKey($location)) { try { & $policyMappings[$location] -upn $upn -phone $phone -ErrorAction Stop Write-Host "✅ 已为用户 $upn 分配 $location 区域对应通话策略" } catch { Write-Error "❌ 用户 $upn 区域策略分配失败:$($_.Exception.Message)" } } else { Write-Host "⚠️ 用户 $upn 所属位置 $location 无匹配策略:Policy doesn’t exist." } } # 执行完成后可按需断开Teams连接 # Disconnect-MicrosoftTeams
使用说明
- 运行前需提前安装最新版Microsoft Teams PowerShell模块,建议用管理员权限启动PowerShell
- 确认CSV文件表头包含
userprincipalname、Phonenumber、Location三个字段,和代码中读取的字段名完全一致 - 映射表中的策略名称需和租户内实际存在的语音路由策略名完全一致,可执行
Get-CsOnlineVoiceRoutingPolicy查询租户内所有可用策略 - 正式批量执行前,建议先选取2-3个测试用户验证逻辑,避免批量配置错误
内容的提问来源于stack exchange,提问作者Dillon
相关产品推荐
相关产品推荐

