从一个命令作为参数到另一个命令的值

时间:2013-04-11 00:12:02

标签: powershell exchange-server-2010

我试图找出如何从一个命令获取值作为另一个命令的参数,并在单个表中使用两者的输出。具体来说,我使用两个cmdlet Get-MailboxGet-MailboxStatistics(这是针对Exchange 2010服务器)。

Get-Mailbox我需要DisplayNameUseDatabaseQuotaDefaults和数据库字段。除此之外,我需要从Get-MailboxStatistics TotalItemSizeStorageLimitStatus字段获取。

我可以单独运行这些命令中的每一个,但无法弄清楚如何使用DisplayName中的Get-Mailbox值加入Get-MailboxStatistics命令的Identity值,然后输出整个批次到一张桌子里。

我正在尝试这些方面:

get-mailbox | ForEach-Object {write-host $_.DisplayName, $_.UseDatabaseQuotaDefaults, $_.Database, Get-MailboxStatistics $_.SamAccountName}

不是将Get-MailboxStatistics实际处理为命令,而是将其显示为文本。如何让PS将其视为命令而不是write-host cmdlet的文本?

3 个答案:

答案 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
    }
}