Извлечение и сохранение конкретной пользовательской информации. Ссылка в foreach - PullRequest
0 голосов
/ 04 мая 2018

Мне нужна помощь в автоматизации создания псевдонимов на новом сервере Exchange в новом домене. Это формирует один из многих этапов продолжающейся миграции.

Я бы хотел запустить что-то вроде следующего:

New-Mailbox -alias $Alias -name "$FullName" -database "CompanyDatabase" -org "CompanyMailboxes" -LinkedMasterAccount $UserAccount -LinkedDomainController domain.example.com -UserPrincipalName $UserEmailAddress

Однако мне нужен способ извлечь необходимые переменные из существующего домена и вывести их в файл. Затем с помощью оператора foreach рекурсивно выполните указанную выше команду.

Мне нужно извлечь каждого пользователя:

  • Псевдоним (John Doe = johnd)
  • ФИО
  • Аккаунт (johnd@domain.example.com ИЛИ john@domain.example.com в зависимости от того, когда был создан пользователь)
  • Адрес электронной почты (johnd@another.domain.com)

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

Затем каким-то образом оберните указанную выше команду в foreach и обратитесь к файлу.

Ответы [ 2 ]

0 голосов
/ 15 мая 2018

Мне удалось решить это. Чтобы поблагодарить респондентов за помощь и помочь другим с тем же вопросом:

Запустите следующий скрипт powershell на контроллере домена.

Import-Module ActiveDirectory 
foreach ($User in (Get-ADUser -Server "<SERVER>" -Filter * -Properties EmailAddress)){Write-Output "$($User.SamAccountName),$($User.EmailAddress),$($User.Name)" >> 'C:\output.csv'}

Вывод будет сохранен как CSV (без заголовков) в C: \ output.csv

Скопируйте выходной файл на ваш сервер обмена и запустите следующий скрипт в консоли обмена (вам нужно будет включить свои собственные заголовки в CSV, я использовал здесь, например, «Имя» и «Фамилия» и т. Д.) );

Import-CSV -delimiter ";" "output.csv" | Foreach {
$FullName = $_.Name + " " + $_.Surname
New-Mailbox -alias $_.Alias -name $Fullname -Firstname $_.Name -Lastname $_.Surname -database "<DATABASE>" -org "<OU>" -LinkedMasterAccount $_.AccountDomain -LinkedDomainController <DOMAIN CONTROLLER> -UserPrincipalName $_.Email
}

Мне удалось успешно создать псевдоним для всех пользователей, используя этот метод. Ваша ситуация может отличаться, но я надеюсь, что этого достаточно для обратного инжиниринга, если это потребуется.

0 голосов
/ 04 мая 2018
$OLD = Get-mailbox -resultsize 10
foreach ( $NEW in $OLD ) { New-Mailbox -alias $OLD.alias -name $OLD.Name ... }

Это работает самым простым способом, вам захочется повозиться с ним больше, так как вы будете таким образом подбирать все виды почтовых ящиков.

РЕДАКТИРОВАТЬ: Существующие атрибуты такие же, как в новом домене?

-alias $( ( $OLD.Name ).Split( " " )[-1] + ( $OLD.Name ).Split( " " )[0] )

Тогда вы могли бы использовать ту же команду, чтобы сделать адрес электронной почты?

$( ( $OLD.Name ).Split( " " )[-1] + ( $OLD.Name ).Split( " " )[0] + "@another.domain.com" )
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...