Комбинированный запрос AD и Exchange\WMI

Станислав Булдаков подкинул интересную задачку. Ему надо было объеденить данные доступные только из Active Directory, и данные которые можно получить лишь выполненив WMI запрос к Exchange.

И вот что я намалевал в результате🙂

Так как из WMI нужны были лишь 2 свойства, я решил не заморачиваться и сделать под каждое свойство отдельную хэш-таблицу (а можно было запихнуть в одну хэш-таблицу объекты полученные запросом, а не сами свойства):

$Sizes = @{}
$Messages = @{}

Затем следует запрос к WMI, в котором заполняются эти таблицы:

Get-WmiObject -ComputerName $exchserver -Namespace root\MicrosoftExchangeV2 -Class Exchange_Mailbox |
ForEach {$Sizes[$_.MailboxDisplayName]=$_.Size; $Messages[$_.MailboxDisplayName]=$_.TotalItems}

В качестве ключа для таблиц используется свойство MailboxDisplayName, оно (во всяком случае у меня) полностью совпадает со свойством DisplayName в AD.  Ну и в переменной $ExchServer как можно догадаться находится имя сервера Exchange🙂

Затем идёт запрос в AD:

Get-QADUser -IncludedProperties homeMDB -SerializeValues -SizeLimit 0 | Where-Object {$_.homeMDB} |
Select-Object Name, homeMDB, department, Company, 
@{name="MailboxSize";expression={$Sizes[$_.DisplayName]}},
@{name="MailboxItems";expression={$Messages[$_.DisplayName]}}

В этом запросе Select-Object используется не только для отбора лишь необходимых свойств, но и для добавления двух своих — MailboxSize и MailboxItems, данные для которых берутся из соответствующих хэш-таблиц. В результате у нас получаются объекты пользователей Active Directory, но со свойствами Name, homeMDB, department, Company и самое главное MailboxSize и MailboxItems🙂

Здесь применяется командлет Get-QADUser из набора ActiveRoles Management Shell for Active Directory от Quest Software, сильно облегчающего работу с AD (можно бесплатно скачать тут).

комментария 2 to “Комбинированный запрос AD и Exchange\WMI”

  1. Stanislav Says:

    ого! спасибо! завтра попробую запустить.

  2. Stanislav Says:

    Извиняюсь, что задержался с тестированием. Скрипт заработал когда я вместо «-IncludedProperties homeMDB» использовал ключ «-IncludeAllProperties».


Обсуждение закрыто.

%d такие блоггеры, как: