3

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

Get-Mailbox我需要DisplayNameUseDatabaseQuotaDefaults数据库字段。除此之外,我需要从Get-MailboxStatisticsandTotalItemSize字段StorageLimitStatus中获取。

我可以单独运行这些命令中的每一个,但无法弄清楚如何使用DisplayNameGet-Mailbox输入到Get-MailboxStatistics命令的标识值中的值,然后将整个批次输出到单个表中。

我正在尝试这些方面的东西:

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

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

4

3 回答 3

2

您需要使用括号,类似于以下内容:

get-mailbox | ForEach-Object { Write-Host ` 
    $_.DisplayName, `
    $_.UseDatabaseQuotaDefaults, `
    $_.Database, `
    (Get-MailboxStatistics $.SamAccountName) }
#   ^------- note the parentheses ---------^
于 2013-04-11T00:23:20.013 回答
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
  }

}

感谢大家!

于 2013-04-11T17:26:57.183 回答
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
    }
}
于 2013-04-11T07:45:15.517 回答