【问题标题】:Change Formatting Of Phone Numbers in AD Using PowerShell使用 PowerShell 更改 AD 中电话号码的格式
【发布时间】:2020-07-31 23:32:12
【问题描述】:

我看到了很多关于这个的很棒的帖子,但是很难根据我的情况来调整它。

我有一个 OU,我想根据组织的要求以不同的方式格式化所有电话和手机号码。据我所知,目前有两种电话号码格式

  • 03XXXXXXXX
  • +61 3 XXXX XXXX

第二个版本是我们需要的所有电话号码。

对于移动设备,我们目前有 3 种格式

  • 04XXXXXXXX

  • 04XX XXX XXX

  • +61 4XX XXX XXX

我发现棘手的是所有电话号码都必须以 +61 3 开头,手机号码必须以 +61 4 开头

AD 中的大多数数字在开头都有一个0,需要将其删除。

所以一个例子 - 0399998888 将转向 +61 3 9999 888

手机 - 0411333555 将转向 +61 411 333 555

这是我的电话号码,但它不起作用

    Get-ADUser -SearchBase "OU" -Filter "telephoneNumber -like '03*'" -Properties telephoneNumber | select name, telephoneNumber

    Get-ADUser -SearchBase "OU" -Filter "telephoneNumber -like '03*'" -Properties telephoneNumber | Where { $_.telephoneNumber -match '^\\d{10}\$'} | Foreach {Set-ADUser $_ -Replace @{TelephoneNumber=( $_.telephoneNumber -replace '^\(\d{1})\)(\s\d{4})-(\d{4})', '+61 $1 $2 $3') }  -whatIf }

    Get-ADUser -SearchBase "OU" -Filter "telephoneNumber -like '03*'" -Properties telephoneNumber | Where { $_.telephoneNumber -match '^\\d{10}\$'} | Foreach {Set-ADUser $_ -Replace @{TelephoneNumber=( $_.telephoneNumber -replace '^\(\d{1})\)(\s\d{4})-(\d{4})', '+61 $1$2 $3') }  }

    Get-ADUser -SearchBase "OU" -Filter "telephoneNumber -like '+61*'" -Properties telephoneNumber | select name, telephoneNumber

任何帮助将不胜感激!

编辑:这是我用来让它工作的代码

Get-ADUser -SearchBase "OU" -Filter "telephoneNumber -like '03*'" -Properties telephoneNumber |
    ForEach-Object {
        $PhoneNumberRaw = $_.telephoneNumber -replace '^0' -replace '^\+61' -replace '\s' -as [LONG]
        $newPhoneNumber = if ($PhoneNumberRaw -match '^3') {
                            "+61 {0:# #### ####}" -f $PhoneNumberRaw
                        }
                        else {
                            "+61 {0:### ### ###}" -f $PhoneNumberRaw
                        }
        [PSCustomObject]@{
            Name = $_.Name
            TelephoneNumber = $newPhoneNumber
        }
    $Users = Get-ADUser -SearchBase "OU" -Filter "telephoneNumber -like '03*'" -Properties telephoneNumber, distinguishedName
        ForEach ($User In $Users)
    {
        $DN = $User.distinguishedName
        Set-ADUser -Identity $DN -OfficePhone $newPhoneNumber
    }
}

【问题讨论】:

    标签: powershell


    【解决方案1】:

    对您的 AD 一次又一次地运行相同的查询是非常低效的。我会apporach它有点不同。首先,您按原样获取电话号码并删除您实际上不需要的所有内容(不是唯一的),然后区分移动电话和固定电话,然后您只需按照您需要的方式对其进行格式化......也许像这样

    Get-ADUser -Filter "telephonenumber -like '*'" -SearchBase 'OU' -Properties telephoneNumber | 
        ForEach-Object {
            $PhoneNumberRaw = $_.telephoneNumber -replace '^0' -replace '^\+61' -replace '\s' -as [LONG]
            $newPhoneNumber = if ($PhoneNumberRaw -match '^3') {
                                "+61 {0:# #### ####}" -f $PhoneNumberRaw
                            }
                            else {
                                "+61 {0:### ### ###}" -f $PhoneNumberRaw
                            }
            [PSCustomObject]@{
                Name = $_.Name
                TelephoneNumber = $newPhoneNumber
            }
            Set-ADUser -Identity $_.sAMAccountName -OfficePhone $newPhoneNumber -WhatIf
        }
    

    当然,我无法在我的环境中测试它,因为我们肯定有一个完全不同的电话系统,但我测试了数字的逻辑。 -as [LONG]-f 运算符识别数字所必需的。 如果要对 AD 进行实际更改,则必须删除 -WhatIf。当然,对于 AD 的更改,您不需要创建自定义对象。

    【讨论】:

    • 感谢奥拉夫!我尝试运行该脚本,但它要求过滤器。我试过电话号码,但它说参数无效
    • 并且...您添加了一个并再次尝试了吗? (我在上面的代码中添加了过滤器)
    • 是的,它会输出正确的更改,这很好,但我如何让它真正更改 AD 中的电话号码?
    • 感谢奥拉夫,我尽我所能对其进行了修改,以便同时处理手机号码。我如何在 AD 中应用它而不是只给我一个输出?即使他们没有电话号码,它似乎也向所有用户附加了 +61。有没有办法只针对指定了电话或手机号码的用户?谢谢
    • 我更新了答案中的代码。 ...如果您只想获取属性 telephoneNmuber 中具有 something 的帐户,则必须为此添加过滤器。要将更改后的号码 写入 到 AD,您必须使用 set cmdlet,例如 Set-ADUser。相应的参数命名为OfficePhone。要真正发布对 AD 的更改,您必须从代码中删除 WhatIf
    猜你喜欢
    • 2015-08-09
    • 2014-02-18
    • 2019-04-30
    • 1970-01-01
    • 2014-05-17
    • 1970-01-01
    • 2011-09-15
    • 1970-01-01
    相关资源
    最近更新 更多