2014-02-28 57 views
1

下面是我用來獲取Exchange 2007郵箱的當前郵箱限制,配額,StorageLimitStatus和TotalItemSize的腳本。在關聯陣列上排序

Get-MailboxDatabase |` 
    Get-Mailbox |` 
    Format-Table DisplayName,IssueWarningQuota,ProhibitSendQuota,` 
     @{label="TotalItemSize";expression={(get-mailboxstatistics $_).TotalItemSize.Value.ToMB()}},` 
     @{label="StorageLimitStatus";expression={(Get-MailboxStatistics $_).StorageLimitStatus}} |` 
    Sort-Object -Property ******** 

我想排序包含在兩個關聯數組例如值首先按StorageLimitStatus排序,然後按TotalItemSize排序。

我對Powershell的瞭解有限,無法構建正確的排序對象。有任何想法嗎?

+0

Format- *命令應該幾乎總是流水線中的最後一個命令。或者當最後一個命令是Out- *或重定向到文件時倒數第二。 –

+0

謝謝基思,我感謝你的建議和信息。 Hunter Eidson在下面的回覆解釋了爲什麼會出現這種情況。 – TheGreenDestiny

回答

3

格式表將會導致你有問題。它只返回字符串,所以Sort-Object不會找到你要找的東西。使用Select-Object是一個更好的選擇(你可以管通過格式表在年底拿到表輸出):

Get-MailboxDatabase |` 
    Get-Mailbox |` 
    Select-Object DisplayName,IssueWarningQuota,ProhibitSendQuota,` 
     @{label="TotalItemSize";expression={(get-mailboxstatistics $_).TotalItemSize.Value.ToMB()}},` 
     @{label="StorageLimitStatus";expression={(Get-MailboxStatistics $_).StorageLimitStatus}} |` 
    Sort-Object -Property StorageLimitStatus,TotalItemSize | Format-Table 

至於排序,只列出你要排序的屬性,如上面的例子。

+0

工作完美,現在非常有意義(Sort對象期望對象,而不是字符串)。非常感謝你,TIL! – TheGreenDestiny

0

http://technet.microsoft.com/en-us/library/hh849912.aspx: 如果指定多個屬性,則首先按第一個屬性排序對象。如果多個對象的第一個屬性值相同,則這些對象將按第二個屬性排序。

所以,你可以使用:

| Sort-Object -Property StorageLimitStatus,TotalItemSize 
+0

上面的答案有助於解決問題。謝謝,但那不起作用: out-lineoutput:「Microsoft.PowerShell.Commands.Internal.Format.FormatEntryData」類型的對象無效或不在正確的 序列中。這可能是由用戶指定的「format- *」命令造成的,該命令與默認格式相沖突。 – TheGreenDestiny