2015-04-06 84 views
0

我正在嘗試爲託管的Exchange平臺生成郵箱報告並自動化一些事情。基本上每個租戶都在一個OU中。所以我想先拉出OU的列表,然後計算每個OU中的郵箱。這是我到目前爲止:Powershell Exchange郵箱報告

$ous = (Get-ADOrganizationalUnit -SearchBase "OU=Microsoft Exchange Hosted Organizations,DC=yomamma,DC=com" -Filter { (ObjectClass -eq 'organizationalunit') -and (Name -notlike 'Hosted Organization Security Groups') -and (Name -Notlike 'Microsoft Exchange Hosted Organizations') }) 

foreach ($ou in $ous) { 
(Get-Mailbox -Organization $ou.Name -Filter {(Name -notlike 'Administrator' -and Name -notlike 'DiscoverySearch*')} -ResultSize unlimited).count 
} 

它的工作...有點。結果將是每行的大量數字,每個OU的郵箱數量。問題是,然後我在$ ous變量中有OU,並將計數輸出到屏幕上。我需要的是輸出兩列,OU和另一列的計數,所以我可以將其輸入到Export-CSV cmdlet中,以便我可以將客戶端名稱(OU)和CSV文件中的計數發送給他們。我只是不確定如何一次獲得數據的組合

回答

0

組織信息最簡單的方法是將其放入一個對象中,如果以後需要更改數據時它已經存在於可以操作的對象中。

$ous = (Get-ADOrganizationalUnit -SearchBase "OU=Microsoft Exchange Hosted Organizations,DC=yomamma,DC=com" -Filter { (ObjectClass -eq 'organizationalunit') -and (Name -notlike 'Hosted Organization Security Groups') -and (Name -Notlike 'Microsoft Exchange Hosted Organizations') }) 

foreach ($ou in $ous) 
{ 
    # This is how many mailboxes this OU has 
    $mailboxCount = (Get-Mailbox -Organization $ou.Name -Filter {(Name -notlike 'Administrator' -and Name -notlike 'DiscoverySearch*')} -ResultSize unlimited).count 

    # This is a fancy object to store our information 
    $mailboxObject = New-Object psobject -Property ([Ordered]` 
    @{ 
     "OU" = $ou 
     "MailboxCount" = $mailboxCount 
    }) 

    # You can export your CSV here or do other stuff 
    # $mailboxObject | Export-CSV C:\MyPath -NoTypeInformation 
} 

小記:如果你不使用PowerShell的如果我正確理解你v3可取出[Ordered]屬性:)

+0

這似乎是一個更好的方法來做到這一點......我不熟悉New-Object。然而不能讓它運行。我得到一個「'Microsoft.Exchange.Diagnostics.ETraceConfiguration類型初始值設定'引發異常。類別信息:OperationStaopped,PSRemotingTransportException,FullyQualifiedErrorId:JobFailure」 我確實認爲也許我需要修改行「」OU 「= $ ou」到「」OU = $ ou.Name「也許,因爲$ ou變量將包含更多的信息,並且我只需要名稱值,仍然可以得到相同的結果,我運行的是PowerShell 3. – grdlock

+0

好吧,不知道爲什麼,但是我的Powershell窗口一直使用PowerShell 3崩潰。不過,我可以在其他服務器上使用Powershell 2運行腳本,一個問題是上面的foreach循環會在每次運行時覆蓋$ mailboxObject,因此最終所以我添加了一個「$ mailboxList = @()」數組,然後在New-Object運行「$ mailboxList + = $ mailboxCount」之後,在$ mailboxList中執行了Export-CSV陣列。這得到了所需的輸出。 感謝您的幫助! – grdlock

0

,答案很簡單。這將輸出csv內容。如果您願意,可以刪除引號並用`t替換逗號,然後您可以從PowerShell控制檯複製/粘貼到Excel中。

$ous = (Get-ADOrganizationalUnit -SearchBase "OU=Microsoft Exchange Hosted Organizations,DC=yomamma,DC=com" -Filter { (ObjectClass -eq 'organizationalunit') -and (Name -notlike 'Hosted Organization Security Groups') -and (Name -Notlike 'Microsoft Exchange Hosted Organizations') }) 

foreach ($ou in $ous) { 
    '"' + $ou.Name + '",' + (Get-Mailbox -Organization $ou.Name -Filter {(Name -notlike 'Administrator' -and Name -notlike 'DiscoverySearch*')} -ResultSize unlimited).count 
} 
相關問題