我试图找出如何从一个命令获取值作为另一个命令的参数,并在单个表中使用两者的输出。具体来说,我使用两个cmdlet Get-Mailbox
和Get-MailboxStatistics
(这是针对Exchange 2010服务器)。
从Get-Mailbox
我需要DisplayName
,UseDatabaseQuotaDefaults
和数据库字段。除此之外,我需要从Get-MailboxStatistics
TotalItemSize
和StorageLimitStatus
字段获取。
我可以单独运行这些命令中的每一个,但无法弄清楚如何使用DisplayName
中的Get-Mailbox
值加入Get-MailboxStatistics
命令的Identity值,然后输出整个批次到一张桌子里。
我正在尝试这些方面:
get-mailbox | ForEach-Object {write-host $_.DisplayName, $_.UseDatabaseQuotaDefaults, $_.Database, Get-MailboxStatistics $_.SamAccountName}
不是将Get-MailboxStatistics
实际处理为命令,而是将其显示为文本。如何让PS将其视为命令而不是write-host
cmdlet的文本?
答案 0 :(得分:1)
您需要使用括号,这些内容如下:
get-mailbox | ForEach-Object { Write-Host `
$_.DisplayName, `
$_.UseDatabaseQuotaDefaults, `
$_.Database, `
(Get-MailboxStatistics $.SamAccountName) }
# ^------- note the parentheses ---------^
答案 1 :(得分:1)
使用以前答案中的一些信息,加上一些谷歌搜索以及我公平分享的诅咒,提出了以下实际有效的脚本:
$mbx = Get-Mailbox
ForEach ($cur in $mbx)
{
$stat = (Get-MailboxStatistics $cur.DisplayName)
New-Object PSObject -Property @{
DisplayName = $cur.DisplayName
UseDatabaseQuotaDefaults = $cur.UseDatabaseQuotaDefaults
SamAccountName = $cur.SamAccountName
StorageLimitStatus = $stat.StorageLimitStatus
TotalItemSize = $stat.TotalItemSize
Database = $stat.Database
}
}
谢谢大家!
答案 2 :(得分:0)
获取所有邮箱的列表,每个邮箱将其统计信息分配给变量,然后使用两个对象的属性创建自定义对象:
Get-Mailbox | ForEach-Object {
$stats = $_ | Get-MailboxStatistics
New-Object PSObject -Property @{
DisplayName = $_.DisplayName
UseDatabaseQuotaDefaults = $_.UseDatabaseQuotaDefaults
Database = $_.Database
SamAccountName = $_.SamAccountName
TotalItemSize = $stats.TotalItemSize
StorageLimitStatus = $stats.StorageLimitStatus
}
}