Wednesday, January 14, 2009

PowerShell and Exchange 2003

Was tasked with getting some information out of Exchange 2003. Basically they wanted me to match up mailbox accounts with AD Users.  The only consistent way to do this in our environment was to compare the LegacyDN property from the root\MicrosoftExchangeV2 - Exchange_Mailbox class with the AD User property LegacyExchangeDN.  Following is the script used to iterate through our Exchange 2003 servers and generate an Excel report (CSV file).








  1. function Get-ExchangeInfo   

  2. {   

  3.     BEGIN   

  4.     {    

  5.         $Start = Get-Date  

  6.         Write-Host "Script Started: $start`nProcessing"  

  7.     }      

  8.     PROCESS   

  9.     {   

  10.         $MailBoxes = Get-WmiObject `   

  11.           -namespace 'root\MicrosoftExchangeV2' `   

  12.           -class 'Exchange_MailBox' `   

  13.           -computerName $_ | sort size -desc | `   

  14.            Select MailBoxDisplayName, `   

  15.             ServerName, `   

  16.             StorageGroupName, `   

  17.             StoreName, `   

  18.             Size, `   

  19.             TotalItems, `   

  20.             legacyDN   

  21.                

  22.         Write-Host "Server: $_"  

  23.         foreach($MailBox in $MailBoxes)   

  24.         {      

  25.             $ldap = "(LegacyExchangeDN={0})" -f $MailBox.legacyDN   

  26.             $User = Get-QADUser `   

  27.               -SizeLimit 0 `   

  28.               -IncludeAllProperties `   

  29.               -LdapFilter $ldap | `   

  30.                SELECT SamAccountName, Department, DisplayName   

  31.                    

  32.             $obj = New-Object psobject   

  33.             $obj | Add-Member NoteProperty SamAccountName $User.SamAccountName   

  34.             $obj | Add-Member NoteProperty Department $User.Department   

  35.             $obj | Add-Member NoteProperty DisplayName $User.DisplayName   

  36.             $obj | Add-Member NoteProperty Size $MailBox.Size   

  37.             $obj | Add-Member NoteProperty TotalItems $MailBox.TotalItems   

  38.             $obj | Add-Member NoteProperty ServerName $MailBox.ServerName   

  39.             $obj | Add-Member NoteProperty StorageGroupName $MailBox.StorageGroupName   

  40.             $obj | Add-Member NoteProperty StoreName $MailBox.StoreName   

  41.             $obj | Add-Member NoteProperty LegacyDN $MailBox.LegacyDN   

  42.             Write-Output $obj  

  43.         }   

  44.     }   

  45.     END   

  46.     {   

  47.         $End = Get-Date  

  48.         Write-Host "Script completed: $end"  

  49.         Write-Host "Total Duration: $($end-$Start).minute"  

  50.     }      

  51. }    

  52. Clear-Host   

  53. $Servers = 'ms01','ms02','ms03','ms04','ms05','ms06'     

  54. $Servers | Get-ExchangeInfo | Export-Csv -path 'c:\ExchangeInfo.csv' -noTypeInformation   

Enjoy!

1 comment:

Alexis said...

MS Exchange has many good facilties. But once I used one of them, and after that something happened with my program. Luckily I rapidly worked out the proper instrument for resolving. This tool showed how it would help with many like problems - reparar edb.