我看到了很多关于此的出色文章,但是很难根据自己的情况进行定制。
我有一个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
}
}
最佳答案
一次又一次地对广告运行相同的查询效率很低。我会略有不同。首先,您按原样使用电话号码,并删除您实际上不需要的所有内容(不是唯一的内容),然后区分移动电话和固定电话,然后简单地按照所需的方式对其进行格式化……就像这样
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
。当然,对于更改广告,您无需创建自定义对象。
关于powershell - 使用PowerShell更改AD中电话号码的格式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51033131/