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

标签 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
        }
    }
    

    最佳答案

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

    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/

    相关文章:

    powershell - 我可以将 Powershell 4 与 Powershell 3 并排安装吗?

    json - 使用 PowerShell 更新 JSON 文件

    powershell - 管道中的 cmdlet 是否并行执行?

    git - 无法通过 SSH 连接到自定义端口上的 Gitlab 容器

    powershell - 使用 Select-String 检查 powershell 中的两个 .txt 文件

    powershell - 使用 Powershell 脚本调用 WebRequest

    list - 在 Powershell 中编辑注册表值的多字符串数组

    xml - XML文件格式-删除杂散CRLF

    c# - 无法调用反射 DLL 中的方法。我怎样才能得到更好的错误信息?

    powershell - 如何在 Windows 的 Powershell ISE 中激活自动缩进?