Изменение форматирования телефонных номеров в AD с помощью PowerShell - PullRequest
0 голосов
/ 26 июня 2018

Я видел много замечательных постов по этому поводу, но мне было очень трудно адаптировать его для моей ситуации.

У меня есть подразделение, в котором я хочу форматировать все номера телефонов и мобильных телефонов по-разному в соответствии с требованиями организации.Из того, что я могу сказать, в настоящее время существует 2 формата телефонных номеров

  • 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 голосов
/ 26 июня 2018

Выполнять один и тот же запрос к вашей AD снова и снова очень неэффективно.Я бы оценил это немного иначе.Сначала вы берете номер телефона как есть и удаляете все, что вам на самом деле не нужно (что не уникально), затем вы дифференцируете между мобильным и стационарным телефоном, а затем просто форматируете его так, как вам нужно ... как это может быть

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 вам не нужно создавать пользовательский объект.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...