Получаем размер почтового ящика Exchange Online в гигабайтах — Hey, Scripting Guy! Blog

Резюме: Microsoft PFE, Brian Jackett рассказывает об использовании Windows PowerShell для получения размера почтового ящика Exchange Online в гигабайтах.

Microsoft Scripring Guy, Ed Wilson на связи. Прошу приветствовать приглашенного блогера Brian T. Jackett.

Итак, Brian…

Office 365 все больше проникает в нашу жизнь. Windows PowerShell – это одно из средств администрирования Office 365, также использующееся для работы с локально установленными системами. Однако, есть и некоторые отличия. В этом посте я расскажу о том, как получить размер почтового ящика Exchange Online в байтах, а затем перевести это в гигабайты.

Проблема

Получить размера почтового ящика в системах on-premise довольно просто. Мой знакомый PFE Gary Siepser в своей статье The Get-MailboxStatistics Cmdlet, the TotalitemSize Property, and that pesky little “b”, рассказывает о том как выполнить эту задачу посредством вызова методов ToMB() и ToGB() для свойства TotalItemSize. Однако, приведенный в этой статье скрипт не будет работать, если на машине, с которой вы удаленно подключаетесь к серверу не установлена или не загружена объектная модель Exchange.

Нечто подобное происходит и при использовании скрипта с Exchange Online. В пространстве имен Exchange определен тип данных ByteQuantifiedSize, возвращаемый свойством TotalItemSize. Если у сессии Windows PowerShell нет доступа к этому пространству имен (в случае, если оно не установлено или не загружено), PowerShell будет использовать апроксимацию этого типа данных.

Приведенный ниже скрипт – пример, взятый из статьи View Mailbox Sizes and Mailbox Quotas Using Windows PowerShell с сайта TechNet. Один из моих заказчиков попробовал его использовать, но у него ничего не вышло (я слегка изменил код для более удобного расположения на странице, а также удалил ссылки на TotalDeletedItemSize).

Get-Mailbox -ResultSize Unlimited |

Get-MailboxStatistics |

Select DisplayName,StorageLimitStatus, `

@{name=»TotalItemSize (MB)»; expression={[math]::Round( `

($_.TotalItemSize.Split(«(«)[1].Split(» «)[0].Replace(«,»,»»)/1MB),2)}}, `

ItemCount |

Sort «TotalItemSize (MB)» –Descending

01

Скрипт создан для использования в Exchange 2010, но он не работает в Exchange Online. При обращении в Exchange Online, возвращаемое свойство TotalItemSize не обладает методом Split, вследствие чего столбец “Total Item Size (MB)” не содержит данных.

Решение

Простым решением будет добавить вызов метода ToString() для свойства TotalItemSize. Это выделено полужирным в строке пять нижеприведенного скрипта.

Get-Mailbox -ResultSize Unlimited |

Get-MailboxStatistics |

Select DisplayName,StorageLimitStatus, `

@{name=»TotalItemSize (MB)»; expression={[math]::Round( `

($_.TotalItemSize.ToString().Split(«(«)[1].Split(» «)[0].Replace(«,»,»»)/1MB),2)}}, `

ItemCount |

Sort «TotalItemSize (MB)» -Descending |

Export-CSV «C:\My Documents\All Mailboxes.csv» –NoTypeInformation

02

Скрипт снова работает, но мне не нравится все это нагромождение методов, вызываемых друг за другом. Я решил попробовать упростить работу со строками с использованием регулярных выражений. (Более полную информацию об использовании регулярных выражений в PowerShell вы можете найти на сайте Regular-Expressions.info).

Результатом стал скрипт с несколько расширенной функциональностью. Во-первых, он позволяет вам ввести имя требуемого пользователя (если его не указать, скрипт выведет информацию о ящиках всех пользователей). Для передачи дополнительных параметров командлету Get-Mailbox (@Params) используется техника, именуемая “splatting”. Во-вторых, скрипт добавляет к объекту статистики постового ящика дополнительный член – TotalItemSizeInBytes. С его помощью вы можете конвертировать размер ящика в любые единицы – KB, MB или GB.

Заметка: Полную версию скрипта вы можете загрузить из Script Center Repository (он включает команды, необходимые для подключения к Exchange Online): Get Exchange Online Mailbox Size in GBs.

$userToFind = Read-Host -Prompt «Enter user to find (leave blank for all)»

$params = @{}

if([string]::IsNullOrEmpty($userToFind) -eq $false)

{$params = @{Identity = $userToFind}

}

$UserMailboxStats = Get-Mailbox -RecipientTypeDetails UserMailbox `

-ResultSize Unlimited @Params |

Get-MailboxStatistics

$UserMailboxStats |

Add-Member -MemberType ScriptProperty -Name TotalItemSizeInBytes `

-Value {$this.TotalItemSize -replace «(.*\()|,| [a-z]*\)», «»}

$UserMailboxStats |

Select-Object DisplayName, TotalItemSizeInBytes,@{Name=»TotalItemSize (GB)»; `

Expression={[math]::Round($_.TotalItemSizeInBytes/1GB,2)}}

03

Регулярное выражение ‘$this.TotalItemSize –replace «(.()|,| [a-z])», «»’ выполняет поиск по следующим трем шаблонам и заменяет их на пустую строку. В результате получается размер ящика в байтах, без каких-либо лишних символов.

1. ,*\( = Любое количество символов, после которых идет открывающая скобка.

2. , = Запятые

3. [a-z]*\) = Любое количество символов букв, после которых идет закрывающая скобка (например “bytes)”).

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

Но я все же считаю, что отсутствие необходимости устанавливать RDP-сессию перевешивает те сложности, с которыми вы можете встретиться во время перехода. Скриптинг – это будущее администрирования, и это делает вас более ценным сотрудником. Я надеюсь, что приведенный скрипт, а также концепции удаленного управления помогут вам стать более профессиональным администратором или разработчиком.

Также вы можете ознакомиться с моей серией видео: The One Thing: Brian Jackett and SharePoint 2010.

Ссылки:

The Get-MailboxStatistics cmdlet, the TotalItemSize property, and that pesky little “b”

View Mailbox Sizes and Mailbox Quotas Using Windows PowerShell

Regular Expressions with Windows PowerShell

Get Exchange Online Mailboxes Size in GBs on TechNet Script Center

The One Thing: Brian Jackett and SharePoint 2010

Автор:

Ed Wilson, Microsoft Scripting Guy

Оригинал:

http://blogs.technet.com/b/heyscriptingguy/archive/2013/02/27/get-exchange-online-mailbox-size-in-gb.aspx


Страницы в социальных сетях:

Twitter: https://twitter.com/vsseth
Facebook: https://fb.com/inpowershell
VKontakte: https://vk.com/inpowershell


Реклама

Добавить комментарий

Заполните поля или щелкните по значку, чтобы оставить свой комментарий:

Логотип WordPress.com

Для комментария используется ваша учётная запись WordPress.com. Выход /  Изменить )

Google+ photo

Для комментария используется ваша учётная запись Google+. Выход /  Изменить )

Фотография Twitter

Для комментария используется ваша учётная запись Twitter. Выход /  Изменить )

Фотография Facebook

Для комментария используется ваша учётная запись Facebook. Выход /  Изменить )

Connecting to %s