Получите большие почтовые ящики, отсортированные по размеру и статусу AD - PullRequest
0 голосов
/ 06 февраля 2020

Я ищу помощи от сообщества.

Я работаю над сценарием, который будет получать:

  1. статистику почтового ящика каждого почтового ящика пользователя, конвертировать общий размер в байты, чтобы отсортировать его, и получить 5 лучших для каждого почтовых ящиков БД.
  2. получить статус активного каталога (включен / отключен) каждого из этих пользователей, а также

Я ожидаю вывод, как показано ниже, но поле AD в конце выходит пустым

Querying Mailbox Database: DBX ......
DisplayName      ItemCount TotalItemSize                   SizeInBytes Server   AD
-----------      --------- -------------                   ----------- ------   --
abc xyz             240259 40.05 GB (43,004,724,140 bytes) 43004724140 ******
ab xyzd****         126020 33.2 GB (35,646,143,893 bytes)  35646143893 ******
ab xyzd****         126020 33.2 GB (35,646,143,893 bytes)  35646143893 ******

Сценарий Powershell:

$DBlist=(Get-MailboxDatabase * | where Server -EQ "EXCHANGE_Server").Name | sort
$DB_Count = ($DBlist | Measure-Object).Count

Write-Host "`n There are $DB_Count DBs with active copy on EXCHANGE_Server: "
Write-Host " $DBlist" -NoNewline

#echo $DBlist

foreach ($DB in $DBlist)
        {
        Write-Host "`n Querying Mailbox Database: $DB ......"
        Get-Mailbox -Database $DB | Get-MailboxStatistics -WarningAction SilentlyContinue | Select-Object -Property DisplayName,ItemCount,TotalItemSize,@{Label="SizeInBytes";Expression={$_.TotalItemSize.Value.ToString().Split('(')[1].Split(' ')[0].Replace(',','').ToInt64($null)}}, @{n='Server';e={(Get-MailboxStatistics -identity $_.DisplayName).ServerName}}, @{n='AD';e={(Get-ADUser -Filter {DisplayName -like $_.DisplayName}).Enabled}} | Sort-Object -Property SizeInBytes -Descending |Select-Object DisplayName,ItemCount,TotalItemSize,SizeInBytes,Server, AD -First 20 | ft -AutoSize
        }

1 Ответ

0 голосов
/ 06 февраля 2020

Вам повезет больше со следующим вычисленным свойством:

@{n='AD';e={(Get-ADUser -Filter "DisplayName -eq '$($_.DisplayName)'").Enabled}}

Необходимо решить несколько вопросов.

  1. Значение параметра -Filter не должно быть блоком скрипта, несмотря на то, что написано в документации. Это должна быть строка в двойных кавычках, например -Filter "DisplayName -like '$($_.DisplayName)'". Внутренние одинарные кавычки необходимы, чтобы не было синтаксической ошибки, когда $($_.DisplayName) вычисляется, а затем помещается в запрос в виде строки.
  2. Использование оператора -like без подстановочных знаков не помогает результаты поиска и менее эффективны, чем просто использование -eq.
  3. . При интерполяции свойства объекта с использованием синтаксиса object.property внутри расширяемой строки (строка в двойных кавычках), выражение должно быть оценено до того, как значение преобразуется в строку. По умолчанию значение переменной без доступа к члену, например $var, будет преобразовано в строку (ваши фактические результаты могут отличаться в зависимости от того, что на самом деле является $var). Однако $var.property преобразует значение $var в строку, а затем добавляет .property в конец строки. Чтобы избежать такого поведения, вы можете использовать подвыражение $() для оценки внутреннего содержимого перед преобразованием строки. Примером этого является $($var.property).
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...