PowerShell双输入验证问题:验证通过后策略无法应用
Teams PowerShell脚本问题:验证通过后策略未执行
问题说明
我编写了一个PowerShell脚本,用于给Teams租户用户分配电话号码及语音路由策略,流程是先完成两项输入验证,再执行策略应用:
- 验证输入的用户ID在租户中真实存在
- 验证输入的电话号码符合正则
^27\d{9}$格式(以27开头,后跟9位数字,共11位)
目前脚本能正常完成两项验证,但验证通过后,Set-CsPhoneNumberAssignment和Grant-CsOnlineVoiceRoutingPolicy这两个核心策略应用步骤完全未执行,直接跳转至询问是否处理其他用户的环节。
原脚本
Connect-MicrosoftTeams do { try { # 验证用户ID $upnentry = Read-Host 'Enter the User Principle Name' # 检查租户中是否存在该用户,不存在则抛出错误 $csu = Get-CsOnlineUser -Identity $upnentry -ErrorAction Stop $csu | Format-List IsSipEnabled, Displ* Write-Host 'User ID has been verified correctly!' # 验证电话号码格式 $phoneinputblock = { try { [validatescript({[regex]::Match($_,'^27\d{9}$').Length -eq 11})] $phoneUserInput = Read-Host "`nEnter Telephone Number" $phoneUserInput } catch{ Write-Warning "Incorrect Format for Telephone Number!" & $phoneinputBlock } } $phoneuserInput = & $phoneinputBlock Write-Host 'Telephone Number is in the correct format!' Set-CsPhoneNumberAssignment -Identity $user -PhoneNumber $phonenumberinput -PhoneNumberType DirectRouting Grant-CsOnlineVoiceRoutingPolicy -PolicyName VRP- International -Identity $upnentry Write-host "Policies applied successfully for : $upnentry" - ForegroundColor Green } catch { Write-Warning "You've entered an invalid UserID: $upnentry" } } until($Host.UI.PromptForChoice('', 'Do you want to check another Users Profile?', ('&Yes', '&No'), 0))
错误截图

问题原因及修正方案
1. 变量名错误
Set-CsPhoneNumberAssignment中使用了未定义的$user,应替换为已验证的$upnentry- 使用了未定义的
$phonenumberinput,应替换为用户输入的$phoneuserInput - 脚本中
$phoneuserInput大小写不一致,虽PowerShell对变量名大小写不敏感,但统一写法更规范
2. 命令换行语法错误
Set-CsPhoneNumberAssignment的参数被拆分在两行,导致PowerShell无法识别完整命令,需将参数放在同一行,或用反引号`(注意是反引号而非单引号)实现合规换行
3. 电话号码验证逻辑错误
原验证逻辑中[regex]::Match($_,'^27\d{9}$').Length -eq 11完全错误:Match方法返回的是Match对象而非字符串,应使用Success属性判断匹配是否成功;另外[ValidateScript()]是属性,不能直接用于变量声明,改用正则匹配验证输入更可靠。
修正后的脚本
Connect-MicrosoftTeams do { try { # 验证用户ID $upnentry = Read-Host 'Enter the User Principle Name' $csu = Get-CsOnlineUser -Identity $upnentry -ErrorAction Stop $csu | Format-List IsSipEnabled, DisplayName Write-Host 'User ID has been verified correctly!' # 验证电话号码格式 do { $phoneUserInput = Read-Host "`nEnter Telephone Number" # 正则验证格式 if (-not [regex]::IsMatch($phoneUserInput, '^27\d{9}$')) { Write-Warning "Incorrect Format for Telephone Number! Must start with 27 followed by 9 digits (total 11 characters)." $validPhone = $false } else { $validPhone = $true } } until ($validPhone) Write-Host 'Telephone Number is in the correct format!' # 应用电话号码分配和语音路由策略 Set-CsPhoneNumberAssignment -Identity $upnentry -PhoneNumber $phoneUserInput -PhoneNumberType DirectRouting Grant-CsOnlineVoiceRoutingPolicy -PolicyName "VRP-International" -Identity $upnentry Write-Host "Policies applied successfully for : $upnentry" -ForegroundColor Green } catch { Write-Warning "You've entered an invalid UserID: $upnentry" } } until($Host.UI.PromptForChoice('', 'Do you want to check another Users Profile?', ('&Yes', '&No'), 0))
内容的提问来源于stack exchange,提问作者Dillon
相关产品推荐
相关产品推荐

