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

Powershell 作为参数从一个命令到另一个命令的值,powershell,exchange-server-2010,Powershell,Exchange Server 2010,我试图找出如何从一个命令中获取一个值作为另一个命令的参数,并在一个表中使用这两个命令的输出。具体来说,我使用了两个cmdlet,Get Mailbox和Get MailboxStatistics(这是针对Exchange 2010服务器的) 从Get Mailbox中,我需要DisplayName,UseDatabaseQuotaDefaults和数据库字段。此外,我还需要从get MailboxStatistics获取TotalItemSize和StorageLimitStatus字段 我可以

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

Get Mailbox
中,我需要
DisplayName
UseDatabaseQuotaDefaults
和数据库字段。此外,我还需要从
get MailboxStatistics
获取
TotalItemSize
StorageLimitStatus
字段

我可以单独运行这些命令中的每一个,但是我不知道如何使用
Get Mailbox
中的
DisplayName
值输入
Get MailboxStatistics
命令的标识值,然后将整批输出到单个表中

我尝试了以下几点:

get-mailbox | ForEach-Object {write-host $_.DisplayName, $_.UseDatabaseQuotaDefaults, $_.Database, Get-MailboxStatistics $_.SamAccountName}
get-mailbox | ForEach-Object { Write-Host ` 
    $_.DisplayName, `
    $_.UseDatabaseQuotaDefaults, `
    $_.Database, `
    (Get-MailboxStatistics $.SamAccountName) }
#   ^------- note the parentheses ---------^

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

您需要使用括号,大致如下:

get-mailbox | ForEach-Object {write-host $_.DisplayName, $_.UseDatabaseQuotaDefaults, $_.Database, Get-MailboxStatistics $_.SamAccountName}
get-mailbox | ForEach-Object { Write-Host ` 
    $_.DisplayName, `
    $_.UseDatabaseQuotaDefaults, `
    $_.Database, `
    (Get-MailboxStatistics $.SamAccountName) }
#   ^------- note the parentheses ---------^

获取所有邮箱的列表,将每个邮箱的统计信息分配给一个变量,然后使用两个对象的属性创建一个自定义对象:

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

利用前面答案中的一些信息,再加上一些谷歌搜索和我的诅咒,我得出了以下实际有效的脚本:

$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
  }

}

谢谢大家

我希望这能奏效,因为这似乎是有道理的,我也能理解。然而,PS只是给了我这个错误:管道没有执行,因为管道已经在执行。管道不能同时执行。+类别信息:OperationsStopped:(Microsoft.Power…tHelperRunspace:ExecutionCmdletHelperRunspace)[],PSInvalidOperationException+FullyQualifiedErrorId:RemotePipelineExecutionFailedOk,我将其放入脚本并尝试运行它。Get Mailbox中的条目显示得很好,但其他条目为空,PS给我一个管道错误:管道未执行,因为管道已在执行。管道不能同时执行。+类别信息:操作停止:(Microsoft.Power…tHelperRunspace:ExecutionCmdletHelperRunspace)[],PSInvalidOperationException+FullyQualifiedErrorId:RemotePipelineExecutionFailed