ratibor79
07-06-2014, 11:47
Здравствуйте, уважаемые коллеги
Столкнулся с такой необходимостью:
Наша компания достаточно большая разветвлённая, имеется несколько организаций в структуре этой компании и не все они с точки зрения топологии сети находиться в одном лесу. Есть компании, которые имею свой собственный лес и собственный Exchange сервер. Как и во многих организациях, сотрудники приходят, уходят, переводиться в другие подразделения (организации), меняются электронные адреса, меняются телефоны, в общем, идет обычный кадровый процесс.
Теперь к самой сути.
Имеется Exchange 2010
- Требуется периодическое обновление членства группы рассылки на основе контактов.
- Необходимо максимально облегчить этот процесс на основе скрипта PowerShell
- Имеется, постоянно обновляющийся CSV файл контактов.
Что требуется от скрипта:
Сверка содержимого CSV и OU в Active Directory на предмет совпадения контактов. Если контакт существует в OU и в CSV, то ни каких действий не происходит. Если контакт отсутствует в OU, то контакт создается на основе полученных данных из CSV. Если существующий контакт в OU отсутствует в CSV, то контакт удаляется из AD.
Дополнительно, должно происходить обновление атрибутов контактов (объектов Active Directory - contacts) на основе CSV файла, а именно мобильный телефон, должность, компания.
И было бы замечательно, если бы вновь созданные контакты помещались в группу рассылки.
Я наклепал небольшой скрипт создающий контакты и меняющий в них атрибуты, но на этом мои знания иссякли. Не могу сообразить, как мне соблюсти условия.
Вот мой скрипт.
Import-Module ActiveDirectory
$Contacts = Import-Csv -Delimiter ";" -Path "C:\SCRIPTS\CreateContactsCSV\ContactsList.csv"
foreach ($Contact in $Contacts)
{
$FN = $Contact.FN
$LN = $Contact.LN
$N = ($Contact.FN +" "+ $Contact.LN)
$A = ($Contact.FN +"."+ $Contact.LN)
$T = $Contact.T
$M = $Contact.M
$OU = $Contact.OU
$SMTP = 'SMTP:' + $Contact.E
New-MailContact `
-FirstName $FN `
-LastName $LN `
-Name $N `
-Alias $A `
-OrganizationalUnit $OU `
-ExternalEmailAddress $SMTP
Get-ADObject -LDAPFilter "objectCLASS=contact" -SearchBase 'OU=Contacts,DC=domain,DC=local' | `
Where-Object {$_.Name -like $N} | Set-ADObject -Replace @{mobile=$M;title=$T}
}
А вот образец CSV файла:
FN;LN;T;M;E;OU
Vladimir;Putin;President;+7 777 1111111;V.Putin@pochta.kz;domain.local/Contacts
Barak;Obama;Assistant of the President;+7 777 2222222;B.Obama@pochta.kz;domain.local/Contacts
Надеюсь на Вашу помощь. Спасибо.
Столкнулся с такой необходимостью:
Наша компания достаточно большая разветвлённая, имеется несколько организаций в структуре этой компании и не все они с точки зрения топологии сети находиться в одном лесу. Есть компании, которые имею свой собственный лес и собственный Exchange сервер. Как и во многих организациях, сотрудники приходят, уходят, переводиться в другие подразделения (организации), меняются электронные адреса, меняются телефоны, в общем, идет обычный кадровый процесс.
Теперь к самой сути.
Имеется Exchange 2010
- Требуется периодическое обновление членства группы рассылки на основе контактов.
- Необходимо максимально облегчить этот процесс на основе скрипта PowerShell
- Имеется, постоянно обновляющийся CSV файл контактов.
Что требуется от скрипта:
Сверка содержимого CSV и OU в Active Directory на предмет совпадения контактов. Если контакт существует в OU и в CSV, то ни каких действий не происходит. Если контакт отсутствует в OU, то контакт создается на основе полученных данных из CSV. Если существующий контакт в OU отсутствует в CSV, то контакт удаляется из AD.
Дополнительно, должно происходить обновление атрибутов контактов (объектов Active Directory - contacts) на основе CSV файла, а именно мобильный телефон, должность, компания.
И было бы замечательно, если бы вновь созданные контакты помещались в группу рассылки.
Я наклепал небольшой скрипт создающий контакты и меняющий в них атрибуты, но на этом мои знания иссякли. Не могу сообразить, как мне соблюсти условия.
Вот мой скрипт.
Import-Module ActiveDirectory
$Contacts = Import-Csv -Delimiter ";" -Path "C:\SCRIPTS\CreateContactsCSV\ContactsList.csv"
foreach ($Contact in $Contacts)
{
$FN = $Contact.FN
$LN = $Contact.LN
$N = ($Contact.FN +" "+ $Contact.LN)
$A = ($Contact.FN +"."+ $Contact.LN)
$T = $Contact.T
$M = $Contact.M
$OU = $Contact.OU
$SMTP = 'SMTP:' + $Contact.E
New-MailContact `
-FirstName $FN `
-LastName $LN `
-Name $N `
-Alias $A `
-OrganizationalUnit $OU `
-ExternalEmailAddress $SMTP
Get-ADObject -LDAPFilter "objectCLASS=contact" -SearchBase 'OU=Contacts,DC=domain,DC=local' | `
Where-Object {$_.Name -like $N} | Set-ADObject -Replace @{mobile=$M;title=$T}
}
А вот образец CSV файла:
FN;LN;T;M;E;OU
Vladimir;Putin;President;+7 777 1111111;V.Putin@pochta.kz;domain.local/Contacts
Barak;Obama;Assistant of the President;+7 777 2222222;B.Obama@pochta.kz;domain.local/Contacts
Надеюсь на Вашу помощь. Спасибо.