获取大邮箱,按大小和 AD 状态排序
Get large Mailboxes, sorted with Size and with AD Status
我正在寻求社区的帮助。
我正在编写一个脚本,它将获得:
- 每个用户邮箱的邮箱统计,将总大小转换为字节进行排序,并为每个邮箱数据库获取前5个。
- 同时获取每个用户的活动目录状态 (Enabled/Disabled)
我期待如下所示的输出,但最后的 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
}
你的运气会更好属性:
@{n='AD';e={(Get-ADUser -Filter "DisplayName -eq '$($_.DisplayName)'").Enabled}}
有几个问题需要解决。
-Filter
参数值不应是脚本块,尽管文档中有说明。它应该是双引号字符串,例如-Filter "DisplayName -like '$($_.DisplayName)'"
。内部单引号是必需的,因此在评估 $($_.DisplayName)
然后将其作为字符串放入查询时不会出现语法错误。
- 使用不带任何通配符的
-like
运算符对您的搜索结果没有帮助,而且效率低于仅使用 -eq
.
- 在可扩展字符串(双引号字符串)内使用语法
object.property
插入对象 属性 时,需要在将值转换为字符串之前评估表达式。默认情况下,没有成员访问权限的变量,例如 $var
会将其值转换为字符串(您的实际结果可能会有所不同,具体取决于 $var
实际是什么)。但是,$var.property
会将 $var
值转换为字符串,然后将 .property
附加到字符串的末尾。为避免这种行为,您可以使用子表达式 $()
在字符串转换之前评估内部内容。例如 $($var.property)
.
我正在寻求社区的帮助。
我正在编写一个脚本,它将获得:
- 每个用户邮箱的邮箱统计,将总大小转换为字节进行排序,并为每个邮箱数据库获取前5个。
- 同时获取每个用户的活动目录状态 (Enabled/Disabled)
我期待如下所示的输出,但最后的 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
}
你的运气会更好属性:
@{n='AD';e={(Get-ADUser -Filter "DisplayName -eq '$($_.DisplayName)'").Enabled}}
有几个问题需要解决。
-Filter
参数值不应是脚本块,尽管文档中有说明。它应该是双引号字符串,例如-Filter "DisplayName -like '$($_.DisplayName)'"
。内部单引号是必需的,因此在评估$($_.DisplayName)
然后将其作为字符串放入查询时不会出现语法错误。- 使用不带任何通配符的
-like
运算符对您的搜索结果没有帮助,而且效率低于仅使用-eq
. - 在可扩展字符串(双引号字符串)内使用语法
object.property
插入对象 属性 时,需要在将值转换为字符串之前评估表达式。默认情况下,没有成员访问权限的变量,例如$var
会将其值转换为字符串(您的实际结果可能会有所不同,具体取决于$var
实际是什么)。但是,$var.property
会将$var
值转换为字符串,然后将.property
附加到字符串的末尾。为避免这种行为,您可以使用子表达式$()
在字符串转换之前评估内部内容。例如$($var.property)
.