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



我看到了很多关于这个的很棒的帖子,但很难根据我的情况定制它。

我有一个 OU,我想根据组织的要求以不同的方式格式化所有电话和手机号码。据我所知,目前有 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}))(sd{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}))(sd{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
}
}

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

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的更改,您不需要创建自定义对象。

最新更新