Изменение переменной номера телефона из Active Directory в Powershell - PullRequest
0 голосов
/ 12 декабря 2018

У нас есть скрипт Powershell для автоматического создания подписей outlook с использованием данных, извлеченных из Active Directory.

В настоящее время мы набираем номера телефонов со следующей строкой:

Update-Sig -attribute "TelephoneNumber" -value "$([string]($ADUser.TelephoneNumber))"

Это будетвернуть число в формате + 61112345678.

Я хочу изменить строку, чтобы она всегда была в формате +61 1 1234 5678 с пробелами.

Возможно ли это?Я думаю, мне нужно взять строку, превратить ее в переменную, а затем добавить пробел после определенного количества символов ... но я не уверен, как это сделать.

Спасибо

Ответы [ 2 ]

0 голосов
/ 13 декабря 2018

Кредиты для этого должны идти на @Lee_Daily из-за формата строки.Вы можете сделать что-то вроде ниже, чтобы отформатировать ожидаемые числа '+61', и если в свойстве есть что-то еще, оно распечатает его, чтобы вы могли проверить.

$phone = '+61112345678'

# test if the string starts with a `+` or at least the digits `61`
if ($phone.Trim() -match '^(\+|61)') {
    $phone = '+{0:## # #### ####}' -f ([int64]($phone -replace '\D',''))
    Write-Host "Formatted TelephoneNumber: '$phone'" -ForegroundColor Green
}
else {
    # not a '+61' number. Write it out so you can check/correct manually
    Write-Host "Unexpected TelephoneNumber: '$phone'" -ForegroundColor Red
}


ОБНОВЛЕНИЕ

Чтобы ответить на ваш последний комментарий, действительно, приведенный выше код не устанавливает недавно отформатированный номер телефона в атрибуте ADUser.
Я думал, что вопрос был оформатирование, а не настройка.

Хотя ваша ссылка не работает, установить ее в AD было бы достаточно просто.
Кажется, у вас уже есть объект с именем $ADUser, и я полагаю, что это произошло из более раннего вызова Get-ADUserты сделал.Устанавливая отформатированный номер, полученный с помощью приведенного выше кода, вы можете просто обновить номер пользователя, используя, например:

# using piping the user object to Set-ADUser
$ADUser | Set-ADUser -OfficePhone $phone

# using one of the users properties as 'Identity' and update using the LDAP attribute name
# for parameter Identity, the cmdlet accepts either the DistinguishedName, objectGUID, objectSid, or the SamAccountName
Set-ADUser -Identity $ADUser.DistinguishedName -Replace @{telephoneNumber = $phone }

ps. Существует также атрибут с именем HomePhone (имя LDAP homePhone), ноэто не тот, который вы используете в своем коде.

Надеюсь, это поможет

0 голосов
/ 12 декабря 2018

вы можете использовать оператор форматирования строки, чтобы сделать это.у него есть опция «номер заполнителя».однако, это работает только для фактических чисел , и ваши данные почти наверняка являются строкой.так что ... я преобразовал числовую часть в [int64].[ ухмылка ]

$SourceValue = '+61112345678'
'+{0:## # #### ####}' -f ([int64]$SourceValue.TrimStart('+'))

выход = +61 1 1234 5678

...