Обычному администратору Exchange вполне достаточно инструментов, которые ему дают Exchange Management Console и Exchange Management Shell. Но что делать, когда их недостаточно?
В последнее время я участвую в проекте по миграции с Exchange 5.5 на Exchange 2007. В рамках этого проекта был использован скрипт, переносящий пользователей 5.5 в качестве контактов в Exchange 2007. Потребовался единоразывый перенос контактов из Exchange 5.5 в Exchange 2007. Приняли решение формировать адресные списки на основании атрибута «st» (State/Province). Создали csv файл, содержащий необходимую информацию. Атрибут «st» можно редактировать через Exchange Management Console. Но командлеты Set-Mailbox и Set-MailContact этого делать не позволяют. Что же делать?
Пользователь и контакт — это объекты Active Directory. Поэтому с их атрибутами можно работать через интерфейс ADSI из PowerShell
В результате были написан следующий скрипт
param ($FileName = «c:\contacts.csv»)
Import-Csv $FileName |
ForEach-Object -Process {
New-MailContact -ExternalEmailAddress $_.ExternalEmailAddress `
-Name $_.Name `
-DisplayName $_.DisplayName `
-PrimarySmtpAddress $_.PrimarySMTPAddress `
-FirstName $_.FirstName `
-LastName $_.LastName `
-OrganizationalUnit «mydomain.com/contacts» `
-alias $_.alias
$Obj = [adsi]»LDAP://CN=$($_.name),OU=Contacts,DC=mydomain,DC=com»
$Obj.psbase.InvokeSet(«st»,$_.st)
$Obj.psbase.CommitChanges()
}
Этот скрипт создает контакты из csv файла (по умолчанию c:\contacts.csv) и записывает атрибуты, в том числе атрибут «st». Как вы видите, работа напрямую с ADSI несколько сложнее, чем с помощью командлетов Exchange. Но как я отметил раньше, как правило это и не требуется
Большое спасибо
Комментарии как всегда приветствуются 🙂