You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

PowerShell域用户添加脚本:手机号输入校验循环优化需求

实现手机号输入的循环校验与格式化(适配Azure/O365同步)

嘿,我之前写域用户管理脚本的时候刚好碰到过一模一样的需求!针对你要实现的「输入不符合要求就重复校验直到正确」的逻辑,我给你整理了一段可以直接嵌入到你现有脚本里的代码片段,完全适配Azure/O365同步的格式要求,还包含办公电话+手机号的10位校验:

# 加载弹窗所需的程序集(如果脚本里已经加载过可以去掉这行)
Add-Type -AssemblyName System.Windows.Forms

# 初始化变量用于循环控制
$isPhoneValid = $false

# 循环执行输入校验,直到符合要求
do {
    # 获取用户输入的办公电话
    $officePhone = Read-Host "请输入办公电话(10位数字)"
    # 清理输入:移除所有非数字字符
    $cleanedOfficePhone = $officePhone -replace '\D', ''
    
    # 获取用户输入的手机号
    $mobilePhone = Read-Host "请输入手机号(10位数字)"
    # 清理输入:移除所有非数字字符(适配Azure/O365同步的纯数字格式要求)
    $cleanedMobilePhone = $mobilePhone -replace '\D', ''

    # 校验两个号码的长度是否为10位
    if ($cleanedOfficePhone.Length -ne 10 -or $cleanedMobilePhone.Length -ne 10) {
        # 弹出错误提示对话框
        [System.Windows.Forms.MessageBox]::Show(
            "办公电话和手机号必须是10位纯数字,请重新输入!",
            "输入错误",
            [System.Windows.Forms.MessageBoxButtons]::OK,
            [System.Windows.Forms.MessageBoxIcon]::Error
        )
        $isPhoneValid = $false
    } else {
        # 校验通过,退出循环
        $isPhoneValid = $true
        # 这里可以把清理后的号码赋值给后续添加用户要用的变量
        $finalOfficePhone = $cleanedOfficePhone
        $finalMobilePhone = $cleanedMobilePhone
        Write-Host "输入校验通过,办公电话:$finalOfficePhone,手机号:$finalMobilePhone"
    }
} while (-not $isPhoneValid)

这段代码的核心逻辑说明:

  • 循环控制:用do-while循环实现「先执行一次输入,再判断是否需要重复」的逻辑,确保用户必须输入符合要求的内容才能继续。
  • 输入清理:用-replace '\D', ''移除所有非数字字符,比如用户输入的(123)456-7890会被转换成1234567890,完美适配Azure/O365同步的格式要求。
  • 长度校验:直接检查清理后的纯数字字符串长度是否为10位,避免了用户输入含特殊字符时的长度误判。
  • 错误提示:用Windows原生弹窗提示错误,比控制台输出更直观,适合非管理员用户操作。

你可以把这段代码直接替换到你现有脚本中处理手机号输入的部分,完全兼容你的「非管理员自提权、无需ADUC」的场景~

内容的提问来源于stack exchange,提问作者Rich

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.21 06:59:11