Попытка выяснить, как вставить инициалы + фамилию в псевдоним для пользователя Exchange с помощью Powershell - PullRequest
0 голосов
/ 29 января 2019

Ранее мой скрипт спрашивал, какое имя пользователя будет предпочтительным.Теперь я хочу сгенерировать имя пользователя на основе инициалов и фамилии.

Однако псевдоним электронной почты немного отличается, и это та часть, где он не работает так, как я хочу.

Когда у пользователя есть три инициала, псевдоним будет установлен на: jh.d.smith@domain.com вместо jhd.smith@domain.com.

Я не знаю, как правильно установить это.Пробовал разные методы.

$IMsg = 'Please enter initials' 
$Initials = '{0}.' -f ((Read-Host -Prompt $IMsg).ToUpper().ToCharArray() -join '.')

$Firstname = Read-Host -Prompt 'Please enter firstname'
$Firstname = (Get-Culture).textinfo.totitlecase($Firstname.tolower())

$Lastname = Read-Host -Prompt 'Please enter surname'
$Lastname = $Lastname.ToLower() -replace ($Lastname.split(' ')[-1]), (Get-Culture).textinfo.totitlecase(($Lastname.split(' ')[-1]))

$UserID = $Initials.Replace('.','') + $lastname ## The username has to be without a dot, for example: jhdsmith.

$aliasid      = $UserID.Insert(2,'.') ## This is for the e-mail alias.
Enable-Mailbox -Identity "$UserID@int.domain.com" -Alias $AliasID -Database DOMAIN-MAIL\DOMAIN-Store\Maildatabase01 | Out-Null

Ответы [ 2 ]

0 голосов
/ 29 января 2019

Это больше, чем вы хотели, но, надеюсь, это будет хорошим обучающим упражнением :) Если вы решаете логические задачи, вам не нужно использовать Replace(), ToCharArray() или Split() ...

Отправной точкой здесь является то, что все входные переменные должны быть в нижнем регистре, альфа-символы (только a-z), это может быть достигнуто следующим образом:

$Initials_input = (Read-Host -Prompt 'Please enter initials').tolower() -replace "\W"

Специальный бит здесь -replace "\W" при этом используются регулярные выражения-символы для удаления любых несловарных символов (чисел / пробелов / специальных символов), оставляя только A-Z или a-z.

Затем, чтобы упростить процессчтобы потом преобразовать в TitleCase или UpperCase, я также использовал .tolower().


Как только вы узнаете состояние всех ваших входных данных, вы можете просто построить строки в желаемом формате и преобразовать в требуемыйcase.

Обратите внимание, что я не изменяю входные переменные, они остаются как есть.Таким образом, они представляют собой известное количество, и вам не нужно отменять изменения, которые требуются одной переменной для создания другой:

$Initials_input = (Read-Host -Prompt 'Please enter initials').tolower() -replace "\W"
$Firstname_input = (Read-Host -Prompt 'Please enter firstname').tolower() -replace "\W"
$Lastname_input = (Read-Host -Prompt 'Please enter surname').tolower() -replace "\W"

$Firstname = (Get-Culture).textinfo.totitlecase($Firstname_input)
$Lastname = (Get-Culture).textinfo.totitlecase($Lastname_input)
$Initials = $Initials_input.ToUpper()
$UserID = $Initials_input + $Lastname_input
$AliasID = $Initials_input + '.' + $Lastname_input

Как видите, кода гораздо меньше, и это легко увидеть.в каком формате будут выводиться ваши данные.


Пример ввода:

$Initials_input = 'jxz'
$Firstname_input = 'john'
$Lastname_input = 'smith'

Дает выходные данные:

  • $ Имя = John
  • $ Фамилия = Smith
  • $ Инициалы = JXZ
  • $ UserID = jxzsmith
  • $ AliasID = jxz.smith
0 голосов
/ 29 января 2019

Я думаю, что самый простой способ - это сделать следующее в псевдониме:

$aliasid = $Initials.Replace('.','') + "." + $Lastname

Я бы также обрезал пробелы, как показано ниже, на случай, если у кого-то есть фамилия с пробелами и т. Д.:

$UserID = (($Initials.Replace('.','') + $lastname).replace(" ","")).ToLower() ## The username has to be without a dot, for example: jhdsmith.

$aliasid = (($Initials.Replace('.','') + "." + $Lastname).Replace(" ","")).ToLower() ## This is for the e-mail alias.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...