Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   Скриптовые языки администрирования Windows (http://forum.oszone.net/forumdisplay.php?f=102)
-   -   [решено] Перенос ящиков в другую базу (http://forum.oszone.net/showthread.php?t=287747)

pogo 10-09-2014 14:12 2400803

Перенос ящиков в другую базу
 
Доброго времени суток.

Задачка следующая.
Надо для пользователей, у кого почтовый ящик меньше 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 2400815

Код:

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 2400822

Большое спасибо за такой быстрый ответ!!
Поражаюсь Вашим знанием psh :)

Подскажите пожалуйста, а что делает следующие строки?
Код:

if($_.IsArchiveMailbox) {
            Disable-Mailbox -Identity $_ -Archive -Confirm:$false

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

Kazun 10-09-2014 14:45 2400827

Именно так - проверять, подключен ли у пользователя сетевой архив, если да, то отключить.

pogo 15-09-2014 14:51 2403091

Дошли руки до скрипта, весь в предвкушении, я обломался этой ошибкой
Цитата:

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 2403096

Попробовать так:
Код:

$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'
}



Время: 23:58.

Время: 23:58.
© OSzone.net 2001-