【问题标题】:Value from one command as parameter to another command一个命令的值作为另一个命令的参数
【发布时间】:2013-04-11 00:12:02
【问题描述】:

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

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

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

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

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

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

【问题讨论】:

    标签: powershell exchange-server-2010


    【解决方案1】:

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

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

    【讨论】:

    • 我希望这能奏效,因为它似乎有道理,而且我能理解。但是 PS 只是给了我这个错误:管道未执行,因为管道已经在执行。管道不能同时执行。 + CategoryInfo : OperationStopped: (Microsoft.Power...tHelperRunspace:ExecutionCmdletHelperRunspace) [], PSInvalidOperationException + FullyQualifiedErrorId : RemotePipelineExecutionFailed
    【解决方案2】:

    使用之前答案中的一些信息,结合一些谷歌搜索和我相当多的诅咒,想出了以下实际有效的脚本:

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

    谢谢大家!

    【讨论】:

      【解决方案3】:

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

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

      【讨论】:

      • 好的,我把它放到一个脚本中并尝试运行它。 Get-Mailbox 中的条目显示得很好,但其他条目是空白的,PS 给我一个管道错误:管道未执行,因为管道已经在执行。管道不能同时执行。 + CategoryInfo : OperationStopped: (Microsoft.Power...tHelperRunspace:ExecutionCmdletHelperRunspace) [], PSInvalidOperationException + FullyQualifiedErrorId : RemotePipelineExecutionFailed
      猜你喜欢
      • 2019-08-26
      • 2012-10-25
      • 2013-11-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-03-27
      相关资源
      最近更新 更多