Peter Bako
Peter Bako

Reputation: 93

Value from one command as parameter to another command

I am trying to figure out how to get a value from one command as a parameter to another command, and use the output of both in a single table. Specifically I am using two cmdlets, Get-Mailbox and Get-MailboxStatistics (this is against an Exchange 2010 server).

From Get-Mailbox I need the DisplayName, UseDatabaseQuotaDefaults and Database fields. Added to this, I need to get from Get-MailboxStatistics the TotalItemSize and StorageLimitStatus fields.

I can run each of these commands individually, but cannot figure out how to use the DisplayName value from Get-Mailbox fed into the Identity value for Get-MailboxStatistics command and then output the whole lot into a single table.

I was trying something along these lines:

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

Instead of actually processing the Get-MailboxStatistics as a command it just display it as text. How can I get PS to treat this as a command and not text for the write-host cmdlet?

Upvotes: 3

Views: 3921

Answers (3)

Peter Bako
Peter Bako

Reputation: 93

Using bits of info from the previous answers, combined with some Google searching and more than my fair share of cursing, came up with the following script that actually works:

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

}

thanks everyone!

Upvotes: 1

Shay Levy
Shay Levy

Reputation: 126782

Get a list of all mailboxes, for each one assign its statistics to a variable, then create a custom object with properties from both objects:

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

Upvotes: 0

Igor Korkhov
Igor Korkhov

Reputation: 8558

You need to use parentheses, something along these lines:

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

Upvotes: 3

Related Questions