使用PowerShell更改AD中电话号码的格式

时间:2018-06-25 23:46:59

标签: powershell

我看到了很多关于此的好文章,但是很难根据自己的情况进行调整。

我有一个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
    }
}

1 个答案:

答案 0 :(得分:2)

一次又一次地对广告运行相同的查询效率很低。我会略有不同。首先,您将电话号码保持原样,并删除您实际上不需要的所有内容(不是唯一的内容),然后区分移动电话和座机,然后简单地按照所需的方式对其进行格式化……就像这样

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。当然,对于更改广告,您无需创建自定义对象。