Имя пользователя:
Пароль:  
Помощь | Регистрация | Забыли пароль?  | Правила  

Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » PowerShell - [решено] Перенос ящиков в другую базу

Ответить
Настройки темы
PowerShell - [решено] Перенос ящиков в другую базу

Старожил


Сообщения: 208
Благодарности: 5

Профиль | Отправить PM | Цитировать


Изменения
Автор: pogo
Дата: 10-09-2014
Доброго времени суток.

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

Отправлено: 14:12, 10-09-2014

 

Ветеран


Сообщения: 1259
Благодарности: 861

Профиль | Отправить PM | Цитировать


Код: Выделить весь код
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'
}
Это сообщение посчитали полезным следующие участники:

Отправлено: 14:31, 10-09-2014 | #2



Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети.

Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля.


Старожил


Сообщения: 208
Благодарности: 5

Профиль | Отправить PM | Цитировать


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

Подскажите пожалуйста, а что делает следующие строки?
Код: Выделить весь код
if($_.IsArchiveMailbox) {
            Disable-Mailbox -Identity $_ -Archive -Confirm:$false
Это имеется ввиду, если архив подключен, отключаем его?

Отправлено: 14:37, 10-09-2014 | #3


Ветеран


Сообщения: 1259
Благодарности: 861

Профиль | Отправить PM | Цитировать


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

Отправлено: 14:45, 10-09-2014 | #4


Старожил


Сообщения: 208
Благодарности: 5

Профиль | Отправить PM | Цитировать


Дошли руки до скрипта, весь в предвкушении, я обломался этой ошибкой
Цитата:
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'
}
Правда по ходу дела он не отключил сетевые архивы на этих ящиках

Последний раз редактировалось pogo, 15-09-2014 в 15:40.


Отправлено: 14:51, 15-09-2014 | #5


Ветеран


Сообщения: 1259
Благодарности: 861

Профиль | Отправить PM | Цитировать


Попробовать так:
Код: Выделить весь код
$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'
}
Это сообщение посчитали полезным следующие участники:

Отправлено: 15:14, 15-09-2014 | #6



Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » PowerShell - [решено] Перенос ящиков в другую базу

Участник сейчас на форуме Участник сейчас на форуме Участник вне форума Участник вне форума Автор темы Автор темы Шапка темы Сообщение прикреплено

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
V. 2010 - Exchange Server 2010 не создает базу данных почтовых ящиков Nemo8787 Microsoft Exchange Server 1 13-02-2014 11:44
V. 2010 - Перенос и удаление ящиков grooz Microsoft Exchange Server 11 20-07-2011 22:50
V. 2010 - Перенос ящиков в 2010 из 2007 при отключенной в нем базе Cartman_ru Microsoft Exchange Server 1 20-01-2011 14:51
Установка - Перенос лицензии на другую висту BlackB Лицензирование продуктов Microsoft 4 15-03-2009 09:22
Exchange 2003 перенос ящиков Mrempty Microsoft Exchange Server 1 12-04-2007 15:48




 
Переход