我看到了很多关于此的好文章,但是很难根据自己的情况进行调整。
我有一个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
}
}
答案 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
。当然,对于更改广告,您无需创建自定义对象。