PDA

Показать полную графическую версию : [решено] Перенос ящиков в другую базу


pogo
10-09-2014, 14:12
Доброго времени суток.

Задачка следующая.
Надо для пользователей, у кого почтовый ящик меньше N Гб (пусть будет 2 Гб), перенести ящики в другую базу данных.
Пользователей много, и руками это делать утомительно, решил вот попробовать через powershell, но пока не очень удачно.
Было бы вообще отлично, ещё бы отсортировать юзеров из определённого OU, но к сожалению в Get-MailboxStatistics, поле OuranizationUnit пустое...

В общем вот что сейчас есть:

Get-MailboxStatistics -database "database" | where {$_.TotalItemSize.Value.ToGB() -lt 2} | sort TotalItemSize -descending | ft DisplayName, TotalItemSize, ItemCount > C:\Temp\db_c_2GB.txtтак отбираю людей из базы, у кого ящик меньше 2Гб. Но переносить надо не всех, а только из определённого OU= domain.ru/test users/users
Как это скриптом сделать не очень понял, по этому пришлось почистить файл руками от лишних.

Подскажите пожалуйста, как теперь можно сделать:
1. проверять, подключен ли у пользователя сетевой архив, если да, то отключить
2. собственно перенести ящик в другую базу
собственно перенос
new-movereauest -targetdatabase 'new_db'Но я не знаю как это всё объединить в один скрипт.

Kazun
10-09-2014, 14:31
get-mailbox -database "database" -organizationalunit "ou=users,ou=test users,dc=domain,dc=ru" |
Get-MailboxStatistics | where {$_.TotalItemSize.Value.ToGB() -lt 2} | Foreach {
if($_.IsArchiveMailbox) {
Disable-Mailbox -Identity $_ -Archive -Confirm:$false
}
New-MoveRequest -Identity $_ -TargetDatabase 'new_db'
}

pogo
10-09-2014, 14:37
Большое спасибо за такой быстрый ответ!!
Поражаюсь Вашим знанием psh :)

Подскажите пожалуйста, а что делает следующие строки?
if($_.IsArchiveMailbox) {
Disable-Mailbox -Identity $_ -Archive -Confirm:$false

Это имеется ввиду, если архив подключен, отключаем его?

Kazun
10-09-2014, 14:45
Именно так - проверять, подключен ли у пользователя сетевой архив, если да, то отключить.

pogo
15-09-2014, 14:51
Дошли руки до скрипта, весь в предвкушении, я обломался этой ошибкой
Pipeline not executed because a pipeline is already executing. Pipelines cannot be executed concurrently.
+ CategoryInfo : OperationStopped: (Microsoft.Power...tHelperRunspace:ExecutionCmdletHelperRunspace) [],
PSInvalidOperationException
+ FullyQualifiedErrorId : RemotePipelineExecutionFailedошибок было много, по этому могу предположить, что на каждый ящик генерировалась ошибка.

Подправил скрипт до такого и вроде заработало:
$mailbox = get-mailbox -database "database c" -organizationalunit "ou=Users,ou=External Users,dc=alvisa,dc=ru" |
Get-MailboxStatistics |
where { $_.TotalItemSize.Value.ToGB() -lt 2 }
$mailbox | Foreach {
if($_.IsArchiveMailbox) {
Disable-Mailbox -Identity $_.DisplayName -Archive -Confirm:$false
}
New-MoveRequest -Identity $_.DisplayName -TargetDatabase 'Regional'
}

Правда по ходу дела он не отключил сетевые архивы на этих ящиках :(

Kazun
15-09-2014, 15:14
Попробовать так:
$mbx = (get-mailbox -database "database" -organizationalunit "ou=users,ou=test users,dc=domain,dc=ru") | Get-MailboxStatistics | where {$_.TotalItemSize.Value.ToGB() -lt 2}

Foreach($mb in $mbx)
{
if($mb.IsArchiveMailbox) {
Disable-Mailbox -Identity $mb -Archive -Confirm:$false
}

New-MoveRequest -Identity $mb -TargetDatabase 'new_db'
}




© OSzone.net 2001-2012