none
PowerShell Exchange RRS feed

  • Вопрос

  • Привет всем.

    Хочется реализовать задачку при помощи скрипта .. но как толком не пойму. Если у кого-то есть уже скриптик выложите. Премного благодарен.

    Задачка такая.

    Есть контролер + Екчендж. В контролере допустим я отключаю учетную запись. Хотелось бы следующие.

    На Екчендж серере посредством скрипта PowerShell который стоит в планировщике. И настроен на запуск раз в 2 дня.

    Скрипт , обходит все ящики , находит отключённого пользователя.

    После выгружает ящик ( и архив тоже если есть ) в файл pst скажем на диск D после удаляет с всех групп данного пользователя ( или оставляет в группе гости например ), и удаляет почтовый ящик.

    Может я много хочу но все же. Может так можно сделать ?

    13 сентября 2012 г. 7:55

Ответы

  • Функционал Scripting Agents и Cmdlet Extension Agents, полагаю, вам должен подойти.

    http://www.alexxhost.ru/2011/05/scripting-agents-cmdlet-extension.html

    • Помечено в качестве ответа Yuriy Lenchenkov 21 сентября 2012 г. 12:04
    13 сентября 2012 г. 8:56
    Отвечающий
  • Андрей, вашу задачу довольно легко решить. Ниже опишу основные моменты, остальное надеюсь допишите сами.

    1. Вам необходимо использовать модуль Activedirectory для powershell и подключиться к  CAS серверу. У меня примерно такой скрипт выглядит вот так:

    $CAS=("CasServer1","CasServer2") #Array of CAS servers for remote powershell connections
    $i=0
    $mail=$null
    Import-Module ActiveDirectory
    while ($mail -eq $Null){
    	$mail=New-PSSession -ConfigurationName Microsoft.Exchange -ConnectionUri ("http://" +$CAS[$i%$CAS.count]+".in.trkua.net/Powershell/")
    	$i++
    }

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

    get-aduser -Filter {enabled -eq $false} -SearchBase "domain distiguished name" -properties memberof

    Я бы рекомендовал этих пользователей определить в какую-то переменную для примера $users

    Запускаете цикл

    foreach ($user in $users){

    Потом удаляете пользователя из всех групп примерно так

    $user.memberof| Remove-ADGroupMember  -Members $user.samaccountname -Confirm:$false

    Дальше экспортируете почтовый ящик через New-MailboxExportRequest и New-MailboxExportRequest с ключем -IsArchive для архива.

    Закрываете цикл.

    т.к. на процедеру експорта требуется время можно поставить слип через Start-sleep

    теперь вы еще раз проходитесь циклом по пользователемя из спипка $users, провереяете что экспорты закончены и они удачны. далее удаляете Export Request и отключаете пользователю почтовый ящик.

    В целом выглядит как-то так, отдельные моменты тестированния, проверок и т.д. надо делать на рабочей среде.

    Удачи Вам



    • Изменено Sidorenko Andrey 13 сентября 2012 г. 9:37 правка скриптов
    • Помечено в качестве ответа Yuriy Lenchenkov 21 сентября 2012 г. 12:04
    13 сентября 2012 г. 9:33

Все ответы

  • День добрый.

    1. Рекомендую обрать внимание на System Center Orchestrator 2012.

    2. Разбейте задачу на шаги.

    Например.

    а. В дополнительный атрибут установить пометку на удаление.

    б. Исключение пользователя из групп и перемещение в OU на основании пометки.

    в. Экспорт почтового ящика и архива в PST.

    г. Удаление ящика.

    д. Блокировка пользователя.

    Скрипты для каждой операции не сложный.


    MCITP. Знание - не уменьшает нашей глупости.

    13 сентября 2012 г. 8:18
    Модератор
  • Функционал Scripting Agents и Cmdlet Extension Agents, полагаю, вам должен подойти.

    http://www.alexxhost.ru/2011/05/scripting-agents-cmdlet-extension.html

    • Помечено в качестве ответа Yuriy Lenchenkov 21 сентября 2012 г. 12:04
    13 сентября 2012 г. 8:56
    Отвечающий
  • Андрей, вашу задачу довольно легко решить. Ниже опишу основные моменты, остальное надеюсь допишите сами.

    1. Вам необходимо использовать модуль Activedirectory для powershell и подключиться к  CAS серверу. У меня примерно такой скрипт выглядит вот так:

    $CAS=("CasServer1","CasServer2") #Array of CAS servers for remote powershell connections
    $i=0
    $mail=$null
    Import-Module ActiveDirectory
    while ($mail -eq $Null){
    	$mail=New-PSSession -ConfigurationName Microsoft.Exchange -ConnectionUri ("http://" +$CAS[$i%$CAS.count]+".in.trkua.net/Powershell/")
    	$i++
    }

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

    get-aduser -Filter {enabled -eq $false} -SearchBase "domain distiguished name" -properties memberof

    Я бы рекомендовал этих пользователей определить в какую-то переменную для примера $users

    Запускаете цикл

    foreach ($user in $users){

    Потом удаляете пользователя из всех групп примерно так

    $user.memberof| Remove-ADGroupMember  -Members $user.samaccountname -Confirm:$false

    Дальше экспортируете почтовый ящик через New-MailboxExportRequest и New-MailboxExportRequest с ключем -IsArchive для архива.

    Закрываете цикл.

    т.к. на процедеру експорта требуется время можно поставить слип через Start-sleep

    теперь вы еще раз проходитесь циклом по пользователемя из спипка $users, провереяете что экспорты закончены и они удачны. далее удаляете Export Request и отключаете пользователю почтовый ящик.

    В целом выглядит как-то так, отдельные моменты тестированния, проверок и т.д. надо делать на рабочей среде.

    Удачи Вам



    • Изменено Sidorenko Andrey 13 сентября 2012 г. 9:37 правка скриптов
    • Помечено в качестве ответа Yuriy Lenchenkov 21 сентября 2012 г. 12:04
    13 сентября 2012 г. 9:33
  • Хммм как-то сложновато выглядит. Попробую разбить и посмотрю что выйдет

    14 сентября 2012 г. 14:25