Saturday, September 26, 2009

Showing information about a Exchange 2003 user in Powershell

Haven't posted any 2003 scripts for a while so here's one that might be useful especially if your looking at doing a bit of documentation before a migration. There are a few tricks when your using ADSI scripts to get information eg if you want to get the OU check the parent object of the userObject. Or if you want to get the Storage Group use the Parent of the MailStore object. If you want to work out quotas check both the mailstore and the user object. To put this all together into a script that takes the username as a parameter it looks like this I've put a download of this code here.

param([String] $samaccountname)
$root = [ADSI]'LDAP://RootDSE'
$dfDefaultRootPath = "LDAP://" + $root.DefaultNamingContext.tostring()
$dfRoot = [ADSI]$dfDefaultRootPath
$gfGALQueryFilter = "(&(&(&(& (mailnickname=*)(objectCategory=person)(objectClass=user)(samaccountname=" + $samaccountname + ")))))"
$dfsearcher = new-object System.DirectoryServices.DirectorySearcher($dfRoot)
$dfsearcher.Filter = $gfGALQueryFilter
$srSearchResult = $dfsearcher.FindOne()
if ($srSearchResult -ne $null){
$uoUserobject = $srSearchResult.GetDirectoryEntry()
$msStore = [ADSI]("LDAP://" + $uoUserobject.homemdb)
$soServer = [ADSI]("LDAP://" + $msStore.msExchOwningServer)
$sgStorageGroup = $msStore.psbase.Parent
$ffEdbFileFilter = "name='" + $msStore.msExchEDBFile.ToString().replace("\","\\") + "'"
$ffStmFileFilter = "name='" + $msStore.msExchSLVFile.ToString().replace("\","\\") + "'"
$mbEdbSize =get-wmiobject CIM_Datafile -filter $ffEdbFileFilter -ComputerName $soServer.Name
$mbStmSize =get-wmiobject CIM_Datafile -filter $ffStmFileFilter -ComputerName $soServer.Name
[int64]$csCombinedSize = [double]$mbEdbSize.FileSize + [int64]$mbStmSize.FileSize
$msFilter = "LegacyDN='" + $uoUserobject.legacyExchangeDN + "'"
$mbsize = get-wmiobject -class Exchange_Mailbox -Namespace ROOT\MicrosoftExchangev2 -filter $msFilter -ComputerName $soServer.Name
$divval = ($csCombinedSize/1024)/100
$pcStore = ($mbsize.size/$divval)/100
"User DisplayName : " + $uoUserobject.displayName
"OU DisplayName : " + $uoUserobject.psbase.Parent.Name
"OU DistinguishedName : " + $uoUserobject.psbase.Parent.DistinguishedName
"Mail Server : " + $soServer.Name
"Exchange Version : " + $soServer.SerialNumber
"Mailbox Store : " + $msStore.Name
"Storage Group : " + $sgStorageGroup.Name
"MailStore Size : " + "{0:#.00}" -f ($csCombinedSize/1GB) + " GB"
"Mailbox Size : " + "{0:#.00}" -f ($mbsize.Size/1KB) + " MB"
"Percentage of Store Used by User : " + "{0:P1}" -f $pcStore
""
"Quotas"
""
"User Quotas"
""
"mDBStorageQuota : " + "{0:#.00}" -f ($uoUserobject.mDBStorageQuota.Value/1KB) + " MB"
"mDBOverQuotaLimit : " + "{0:#.00}" -f ($uoUserobject.mDBOverQuotaLimit.Value/1KB) + " MB"
"mDBOverHardQuotaLimit : " + "{0:#.00}" -f ($uoUserobject.mDBOverHardQuotaLimit.Value/1KB) + " MB"
""
"Store Quotas "
"mDBStorageQuota : " + "{0:#.00}" -f ($msStore.mDBStorageQuota.Value/1KB) + " MB"
"mDBOverQuotaLimit : " + "{0:#.00}" -f ($msStore.mDBOverQuotaLimit.Value/1KB) + " MB"
"mDBOverHardQuotaLimit : " + "{0:#.00}" -f ($msStore.mDBOverHardQuotaLimit.Value/1KB) + " MB"

}

No comments: