#.SYNOPSIS # Get-ExchangeDBSizes – Gather data on Exchange 2007 / 2010 Mailbox Databases. #.DESCRIPTION # Gathers data from Exchange mailbox servers. # These data include: # Server\StorageGroup\Database (2007) or Database (2010), # Total Size (in GB) of the disk, # Size of the .edb file (in GB), # Free disk space, # Percent Disk Free, # Total Mailboxes on the database, # White Space, # Total Free disk space, # Total Percent Free disk space #.EXAMPLE # Get-ExchangeDBSizes #.LINK # https://unlockpowershell.wordpress.com/ # http://poshcode.org/1902 #.NOTES # File Name: Get-ExchangeDBSizes.ps1 # Author: Karl Mitschke # Requires: Exchange Managemnent Shell # Requires: Powershell V2 # Created: 6/14/2010 # Modified: 7/28/2010 to convert .EdbFilePath to String # Modified: 7/28/2010 – Changed whitespace to a [double]
Function Get-MountPointInfo($ServerName) {
$Summary = @()
$VolumeHash = @{}
$VolumeCapacityHash = @{}
$DatabaseSizeHash = @{}
$DatabaseFreeHash = @{}
$MountPoints = Get-WmiObject -Class Win32_Mountpoint -ComputerName $ServerName
$MailboxDatabases = Get-MailboxDatabase -Server $ServerName
$Volumes = Get-WmiObject -Class Win32_Volume -ComputerName $ServerName | Where-Object {$_.DriveType -eq 3}| Select-Object Name,FreeSpace,Capacity
$DatabaseLetters = $MailboxDatabases | Select-Object edbfilepath
foreach ($Volume in $Volumes) {
$VolumeHash.Add($Volume.name.TrimEnd("\"),$Volume.FreeSpace)
$VolumeCapacityHash.Add($Volume.name.TrimEnd("\"),$Volume.Capacity)
}
foreach ($drive in $DatabaseLetters)
{
$letter = $drive.EdbFilePath.ToString().Substring(0,$drive.EdbFilePath.ToString().LastIndexOf("\"))
$DatabaseSizeHash.Add($letter.TrimEnd("\"),$VolumeCapacityHash[$letter])
$DatabaseFreeHash.Add($letter.TrimEnd("\"),$VolumeHash[$letter])
}
$VolumeHash.Clear()
$VolumeCapacityHash.Clear()
#Now I have all mailbox databases, along with the OS reported free space and capacity
foreach ($MP in $Mountpoints) {
$MP.directory = $MP.directory.replace("\\","\").Split("=")[1].Replace("`"","")
if($DatabaseSizeHash[$MP.directory])
{
#This mountpoint is a database
$Record = new-Object PSObject
$OSfree = $DatabaseFreeHash[$MP.directory]
$OSCapacity = $DatabaseSizeHash[$MP.directory]
$DestFolder = "\\"+$ServerName + "\" + $MP.directory
$colItems = (Get-ChildItem $destfolder.Replace(":","$") -Recurse| where{$_.length -ne $null} |Measure-Object -property length -sum)
if($colItems.sum -eq $null) {
$fsize = 0
} else {
$fsize = $colItems.sum
}
$TotFolderSize = $fsize + $OSfree
$percFree = "{0:P0}" -f ( $OSfree/$TotFolderSize)
$Record | add-Member -memberType noteProperty -name Server -Value $ServerName
$Record | add-Member -memberType noteProperty -name "Mount Point" -Value $MP.directory
$Record | add-Member -memberType noteProperty -name "Capacity" -Value ("{0:N2}" -f ($OSCapacity /1gb))
$Record | add-Member -memberType noteProperty -name "Used" -Value ("{0:N2}" -f ($fsize / 1gb))
$Record | add-Member -memberType noteProperty -name "Free" -Value ("{0:N2}" -f ($OSfree / 1gb))
$Record | add-Member -memberType noteProperty -name "Percent Free" -Value $percFree
$Summary += $Record
}
}
return $Summary
}
function Get-ExchangeWhiteSpace {
param(
$ComputerName = $(throw "ComputerName cannot be empty.")
)
# Convert Dates to WMI CIM dates
$tc = [System.Management.ManagementDateTimeconverter]
$Start =$tc::ToDmtfDateTime( (Get-Date).AddDays(-1).Date )
$End =$tc::ToDmtfDateTime( (Get-Date).Date)
$whiteSpace = @{}
# Create two claculated properties for InsertionStrings values
$DB = @{Name="DB";Expression={$_.InsertionStrings[1]}}
$FreeMB = @{Name="FreeMB";Expression={[int]$_.InsertionStrings[0]}}
$freespace = Get-WMIObject Win32_NTLogEvent -ComputerName $ComputerName -Filter "LogFile=’Application’ AND EventCode=1221 AND TimeWritten>=’$Start’ AND TimeWritten<=’$End’" | Select-Object $DB,$FreeMB | Sort-Object DB –Unique –Descending
$freespace | ForEach-Object {$whiteSpace.Add($_.DB,$_.FreeMB)}
#Preceding function from Shay Levy http://blogs.microsoft.co.il/blogs/scriptfanatic/archive/2009/08/13/exchange-white-space.aspx
}
$AllServers = @()
$ServerVersion = @{}
foreach ($server in Get-MailboxServer)
{
$ServerName = $server.name
$version = Get-ExchangeServer -Identity $ServerName | Select-Object AdminDisplayVersion
if($version.admindisplayversion.major)
{
$ServerVersion.Add($ServerName,$version.admindisplayversion.major)
}
else
{
$ServerVersion.Add($ServerName,$version.admindisplayversion.Split()[1].split(".")[0])
}
}
foreach ($server in Get-MailboxServer)
{
$ServerName = $server.Name
if ([int]$ServerVersion[$ServerName] -gt 8)
{ #An Exchange 2010 server, so use Get-MailboxDatabase <database> -Status | Select-Object AvailableNewMailboxSpace
$whiteSpace = @{}
$Free = Get-MailboxDatabase -Server $ServerName -Status | Select-Object Server,Name,AvailableNewMailboxSpace
foreach ($item in $free)
{
$db = $ServerName+"\"+$item.Name
$whiteSpace.Add($item.Name,[double]$item.AvailableNewMailboxSpace.split("(")[1].Split()[0]/1mb)
}
}
Else
{#not an Exchange 2010 server
. Get-ExchangeWhiteSpace $ServerName
}
$MountPoint = . Get-MountPointInfo $ServerName
foreach ($objItem in Get-MailboxDatabase -Server $ServerName)
{
$edbfilepath = $objItem.edbfilepath
$path = "`\`\" + $ServerName + "`\" + $objItem.EdbFilePath.ToString().Split(":")[0] + "$"+ $objItem.EdbFilePath.ToString().Split(":")[1]
$dbsize = Get-ChildItem $path
$dbpath=(Split-Path $EdbFilePath.ToString().Split(":")[1] -Leaf).trimend(".edb")
if (!$MountPoint)
{
$mailboxpath = $ServerName + $EdbFilePath.ToString().Split(":")[1].trimend(".edb")
$size = get-wmiobject -computername $ServerName win32_logicaldisk |where-object {$_.deviceid -eq $objItem.EdbFilePath.ToString().Split("\")[0]} |select-object deviceID, Freespace, Size
$freespace = ($size.freespace / 1GB)
$total = ($size.size / 1GB)
}
if ($MountPoint)
{
$mailboxpath = "$ServerName\$dbpath"
$MPPath = $EdbFilePath.ToString().Substring(0,$EdbFilePath.ToString().LastIndexOf("\"))
$freespace = $DatabaseFreeHash[$MPPath ] /1GB
$total = $DatabaseSizeHash[$MPPath] /1GB
}
$PercentFree = "{0:n2}" -f ($freespace / $total *100)
if (!$MountPoint)
{
$mailboxcount = Get-MailboxStatistics -database "$mailboxpath" |Where {$_.DisconnectDate -eq $null -and $_.ObjectClass -eq ‘Mailbox’} |measure-object
}
if($MountPoint)
{
$mailboxcount = Get-MailboxStatistics -database $mailboxpath.Split("\")[1] |Where {$_.DisconnectDate -eq $null -and $_.ObjectClass -eq ‘Mailbox’} |measure-object
}
$ReturnedObj = New-Object PSObject
$ReturnedObj | Add-Member -MemberType NoteProperty -Name "Server\StorageGroup\Database" -Value $objItem.Identity
$ReturnedObj | Add-Member -MemberType NoteProperty -Name "Total Size (GB)" -Value ("{0:n2}" -f ($total))
$ReturnedObj | Add-Member -MemberType NoteProperty -Name "Used Space (GB)" -Value ("{0:n2}" -f ($dbsize.Length/1024MB))
$ReturnedObj | Add-Member -MemberType NoteProperty -Name "Free Space (GB)" -Value ("{0:n2}" -f ($freespace))
$ReturnedObj | Add-Member -MemberType NoteProperty -Name "Percent Disk Free" -Value $percentfree
$ReturnedObj | Add-Member -MemberType NoteProperty -Name "User Mailbox Count" -Value $mailboxcount.count
if ($objitem.Identity.Split("\").Count -eq 3){$dbasename = $objitem.Identity.Substring($objitem.Identity.IndexOf("\")+1)}
else{$dbasename = $objitem.Identity}
$ReturnedObj | Add-Member -MemberType NoteProperty -Name "White Space (GB)" -Value ("{0:n2}" -f ($whiteSpace[$dbasename]/1024))
$ReturnedObj | Add-Member -MemberType NoteProperty -Name "Total Free (GB)" -Value ("{0:n2}" -f ($freespace + $whiteSpace[$dbasename]/1024))
$TotalPercent = ($freespace + $whiteSpace[$dbasename]/1024) / $total *100
$ReturnedObj | Add-Member -MemberType NoteProperty -Name "Total Percent Free" -Value ("{0:n2}" -f ($TotalPercent))
$AllServers += $ReturnedObj
}
}
$AllServers |Export-Csv C:\scripts\MailboxDatabaseSizeReport.csv -NoTypeInformation
#1 by Kloecker on July 21, 2010 - 16:16
Hello,
i get following error and the script stopped.
—-
Method invocation failed because [Microsoft.Exchange.Data.EdbFilePath] doesn’t contain a method named ‘lastIndexOf’.
An :Zeile:40 Zeichen:72
+ $letter = $drive.EdbFilePath.Substring(0,$drive.EdbFilePath.lastIndexOf <<<< ("\"))
—
i don't know, where the problem is.
#2 by karlmitschke on July 26, 2010 - 14:28
Hello;
Try changing line 40 as follows:
$letter = $drive.EdbFilePath.Substring(0,$drive.EdbFilePath.ToString().LastIndexOf(“\”))
Karl
#3 by Kloecker on July 27, 2010 - 08:38
Sorry,
but now i got following error.
Method invocation failed because [Microsoft.Exchange.Data.EdbFilePath] doesn’t contain a method named ‘Substring’.
An :Zeile:40 Zeichen:38
+ $letter = $drive.EdbFilePath.Substring <<<< (0,$drive.EdbFilePath.ToString().LastIndexOf(“\”))
Ansgar
I run the script against an Windows 2008 SP2 Server with Exchange2007 SP2
#4 by karlmitschke on July 27, 2010 - 15:31
Hello;
Sorry about that.
Try this:
$letter = $drive.EdbFilePath.ToString().Substring(0,$drive.EdbFilePath.ToString().LastIndexOf(“\”))
#5 by Kloecker on July 28, 2010 - 07:55
Hello,
next error:
Method invocation failed because [Microsoft.Exchange.Data.EdbFilePath] doesn’t contain a method named ‘Split’.
An :Zeile:135 Zeichen:69
+ $path = “`\`\” + $ServerName + “`\” + $objItem.EdbFilePath.Split <<<< (":")[0] + "$"+ $objItem.EdbFilePath.Split(":")[1]
#6 by Urlryn on July 28, 2010 - 11:59
Ok Karl….i’m here now! 🙂
Sorry for the initial confusion! looks like someone else is having some of the same issues as I am.
Urlryn
#7 by karlmitschke on July 28, 2010 - 15:15
I have modified the script – please try it now.
Karl
#8 by Luke on July 28, 2010 - 17:47
Hi,
Nice script but it would be nice to pass a server name into the script as a parameter. Within our organisation not all teams have access to all mailbox servers, so this script fails with an access denied as it tries to connect to mailbox servers not managed within our group.
#9 by karlmitschke on August 2, 2010 - 20:21
Luke;
I was actually planning to do that – stay tuned, and I hope to have it this week.
Karl
#10 by zach on July 28, 2010 - 18:31
Im dont think I am executing this script properly. I am attempting to run this against Exchange 2010 (2 copy/4 node dag). I have the script PS1 saved to the server but when I run it i get a screen full of errors.
I am running it like this: .\get-exchangedbsizes.ps1 and/or .\get-exchangedbsizes -servername
First error is:
Method invocation failed because [Microsoft.Exchange.Data.ByteQuantifiedSize] doesn’t contain a method named ‘split’.
At C:\Software\get-exchangedbsizes.ps1:120 char:72
#11 by karlmitschke on August 2, 2010 - 20:26
Zach;
Can you tell me the rest of error 1?
Method invocation failed because [Microsoft.Exchange.Data.ByteQuantifiedSize] doesn’t contain a method named ‘split’.
At C:\Software\get-exchangedbsizes.ps1:120 char:72
Or, better yet, tell me what line 120 is in your script?
Karl
#12 by Luke on August 2, 2010 - 22:57
The split error is due to running the script in version 1 of Powershell. Split was introduced in version 2
#13 by zach on August 2, 2010 - 23:03
Running this on 2008 R2 and I verified Powershell 2.0
Line 120 of the script is:
$whiteSpace.Add($item.Name,[double]$item.AvailableNewMailboxSpace.split(“(“)[1].Split()[0]/1mb)
Here is some more of the error. First three parts. I could capture the whole output and post it to a text file somewhere.
Method invocation failed because [Microsoft.Exchange.Data.ByteQuantifiedSize] doesn’t contain a method named ‘split’.
At C:\software\get-exchangedbsizes.ps1:120 char:72
+ $whiteSpace.Add($item.Name,[double]$item.AvailableNewMailboxSpace.split <<<< ("(")[1].Split()[0]/1mb)
+ CategoryInfo : InvalidOperation: (split:String) [], RuntimeException
+ FullyQualifiedErrorId : MethodNotFound
Method invocation failed because [Microsoft.Exchange.Data.ByteQuantifiedSize] doesn't contain a method named 'split'.
At C:\software\get-exchangedbsizes.ps1:120 char:72
+ $whiteSpace.Add($item.Name,[double]$item.AvailableNewMailboxSpace.split <<<< ("(")[1].Split()[0]/1mb)
+ CategoryInfo : InvalidOperation: (split:String) [], RuntimeException
+ FullyQualifiedErrorId : MethodNotFound
Method invocation failed because [Microsoft.Exchange.Data.ByteQuantifiedSize] doesn't contain a method named 'split'.
At C:\software\get-exchangedbsizes.ps1:120 char:72
+ $whiteSpace.Add($item.Name,[double]$item.AvailableNewMailboxSpace.split <<<< ("(")[1].Split()[0]/1mb)
+ CategoryInfo : InvalidOperation: (split:String) [], RuntimeException
+ FullyQualifiedErrorId : MethodNotFound
Am i suppose to pass a server name to the script? I notice someone else just commented about that which makes me think no…
#14 by karlmitschke on August 31, 2010 - 00:53
Zach;
Sorry I have been absent for so long – are you running PowerShell v1 or v2?
Karl
#15 by Urlryn on July 29, 2010 - 12:24
Morning Karl!
Here is the latest error on the script! Is the reason for this issue cause of powerscript v2?
Get-WmiObject : Invalid query
At C:\db_report3.ps1:96 char:27
+ $freespace = Get-WMIObject <<<=’$Start’ AN
D TimeWritten<='$End'" | Select-Object $DB,$FreeMB | Sort-Object DB -Unique -De
scending
+ CategoryInfo : InvalidOperation: (:) [Get-WmiObject], Managemen
tException
+ FullyQualifiedErrorId : GetWMIManagementException,Microsoft.PowerShell.C
ommands.GetWmiObjectCommand
Exception calling "Add" with "2" argument(s): "Key cannot be null.
Parameter name: key"
At C:\db_report3.ps1:97 char:45
+ $freespace | ForEach-Object {$whiteSpace.Add <<<< ($_.DB,$_.FreeMB)}
+ CategoryInfo : NotSpecified: (:) [], MethodInvocationException
+ FullyQualifiedErrorId : DotNetMethodException
#16 by Kloecker on August 3, 2010 - 17:32
Hello Karl,
the next problem is, that the function mountpoint cannot recognize, that the db’s are on mountpoints
$MountPoint = . Get-MountPointInfo $ServerName
The result ist false, but all db’s on the server are on mountpoints.
#17 by karlmitschke on August 4, 2010 - 21:33
Hello;
What happens if you run this in a seperate powershell window?
Get-WmiObject -Class Win32_Mountpoint -ComputerName
Get-WmiObject -Class Win32_Volume -ComputerName | Where-Object {$_.DriveType -eq 3}
#18 by Urlryn on January 19, 2011 - 13:14
Hey Karl!
Man its been a long time since i needed this! So many other projects!
But wanted to finally comment that both those commands worked for me.
Ran them both on Windows Server 2008 R2, Windows Server 2008, Windows 7 Enterprise.
Ran them against 7 different 2007/2010 exchange servers and all is good with that.
#19 by albertwt on February 24, 2011 - 17:03
Many thakns again for posting such a good script, however, do I need to run this script on my laptop w/ Exc 2k7 Mgmt Console or i need to run this on my server ?
#20 by Karl Mitschke on February 24, 2011 - 17:50
You can run it either place.
Karl
#21 by andy on March 1, 2011 - 13:03
on what line do i modify to specify my server name to pass as a parameter?
#22 by Karl Mitschke on March 1, 2011 - 19:13
Line 103 “foreach ($server in Get-MailboxServer)” will retrive all of your mailbox servers.
You could modify it to foreach ($server in Get-MailboxServer )
Karl
#23 by David on March 7, 2011 - 14:01
Backround
Single Exchange server with netapp attached storage.
This looks like a great script. I can’t seem to get to work for me. Here are the errors when I run it:
Exception calling “Add” with “2” argument(s): “Key cannot be null.
Parameter name: key”
At C:\Scripts\Get-ExchangeDBSizes.ps1:100 char:45
+ $freespace | ForEach-Object {$whiteSpace.Add <<<< ($_.DB,$_.FreeMB)}
+ CategoryInfo : NotSpecified: (:) [], MethodInvocationException
+ FullyQualifiedErrorId : DotNetMethodException
Get-ChildItem : Cannot find path '\\STRSEXCH1\M$\Program Files\Microsoft\Exchange Server\Mailbox\First Storage Group\Mai
lbox Database.edb' because it does not exist.
At C:\Scripts\Get-ExchangeDBSizes.ps1:141 char:28
+ $dbsize = Get-ChildItem <<<< $path
+ CategoryInfo : ObjectNotFound: (\\STRSEXCH1\M$\…ox Database.edb:String) [Get-ChildItem], ItemNotFoundE
xception
+ FullyQualifiedErrorId : PathNotFound,Microsoft.PowerShell.Commands.GetChildItemCommand
Get-MailboxStatistics : Cannot bind parameter 'Database'. Cannot convert value "STRSEXCH1\Program Files\Microsoft\Exchan
ge Server\Mailbox\First Storage Group\Mailbox Databas" to type "Microsoft.Exchange.Configuration.Tasks.DatabaseIdParamet
er". Error: "'STRSEXCH1\Program Files\Microsoft\Exchange Server\Mailbox\First Storage Group\Mailbox Databas' is not a va
lid value for the identity.
Parameter name: Identity"
At C:\Scripts\Get-ExchangeDBSizes.ps1:160 char:50
+ $mailboxcount = Get-MailboxStatistics -database <<<< "$mailboxpath" |Where {$_.DisconnectDate -eq $null -and
$_.ObjectClass -eq 'Mailbox'} |measure-object
+ CategoryInfo : InvalidArgument: (:) [Get-MailboxStatistics], ParameterBindingException
+ FullyQualifiedErrorId : CannotConvertArgumentNoMessage,Microsoft.Exchange.Management.MapiTasks.GetMailboxStatisti
cs
Method invocation failed because [Microsoft.Exchange.Data.Directory.ADObjectId] doesn't contain a method named 'Split'.
At C:\Scripts\Get-ExchangeDBSizes.ps1:174 char:29
+ if ($objitem.Identity.Split <<<< ("\").Count -eq 3){$dbasename = $objitem.Identity.Substring($objitem.Identity.Ind
exOf("\")+1)}
+ CategoryInfo : InvalidOperation: (Split:String) [], RuntimeException
+ FullyQualifiedErrorId : MethodNotFound
Index operation failed; the array index evaluated to null.
At C:\Scripts\Get-ExchangeDBSizes.ps1:176 char:111
+ $ReturnedObj | Add-Member -MemberType NoteProperty -Name "White Space (GB)" -Value ("{0:n2}" -f ($whiteSpace[ <<<<
$dbasename]/1024))
+ CategoryInfo : InvalidOperation: (:) [], RuntimeException
+ FullyQualifiedErrorId : NullArrayIndex
Index operation failed; the array index evaluated to null.
At C:\Scripts\Get-ExchangeDBSizes.ps1:177 char:123
+ $ReturnedObj | Add-Member -MemberType NoteProperty -Name "Total Free (GB)" -Value ("{0:n2}" -f ($freespace + $whit
eSpace[ <<<< $dbasename]/1024))
+ CategoryInfo : InvalidOperation: (:) [], RuntimeException
+ FullyQualifiedErrorId : NullArrayIndex
Index operation failed; the array index evaluated to null.
At C:\Scripts\Get-ExchangeDBSizes.ps1:178 char:44
+ $TotalPercent = ($freespace + $whiteSpace[ <<<< $dbasename]/1024) / $total *100
+ CategoryInfo : InvalidOperation: (:) [], RuntimeException
+ FullyQualifiedErrorId : NullArrayIndex
Get-ChildItem : Cannot find path '\\STRSEXCH1\N$\Program Files\Microsoft\Exchange Server\Mailbox\Third Storage Group\Mai
lbox Database.edb' because it does not exist.
At C:\Scripts\Get-ExchangeDBSizes.ps1:141 char:28
+ $dbsize = Get-ChildItem <<<< $path
+ CategoryInfo : ObjectNotFound: (\\STRSEXCH1\N$\…ox Database.edb:String) [Get-ChildItem], ItemNotFoundE
xception
+ FullyQualifiedErrorId : PathNotFound,Microsoft.PowerShell.Commands.GetChildItemCommand
Get-MailboxStatistics : Cannot bind parameter 'Database'. Cannot convert value "STRSEXCH1\Program Files\Microsoft\Exchan
ge Server\Mailbox\Third Storage Group\Mailbox Databas" to type "Microsoft.Exchange.Configuration.Tasks.DatabaseIdParamet
er". Error: "'STRSEXCH1\Program Files\Microsoft\Exchange Server\Mailbox\Third Storage Group\Mailbox Databas' is not a va
lid value for the identity.
Parameter name: Identity"
At C:\Scripts\Get-ExchangeDBSizes.ps1:160 char:50
+ $mailboxcount = Get-MailboxStatistics -database <<<< "$mailboxpath" |Where {$_.DisconnectDate -eq $null -and
$_.ObjectClass -eq 'Mailbox'} |measure-object
+ CategoryInfo : InvalidArgument: (:) [Get-MailboxStatistics], ParameterBindingException
+ FullyQualifiedErrorId : CannotConvertArgumentNoMessage,Microsoft.Exchange.Management.MapiTasks.GetMailboxStatisti
cs
Method invocation failed because [Microsoft.Exchange.Data.Directory.ADObjectId] doesn't contain a method named 'Split'.
At C:\Scripts\Get-ExchangeDBSizes.ps1:174 char:29
+ if ($objitem.Identity.Split <<<< ("\").Count -eq 3){$dbasename = $objitem.Identity.Substring($objitem.Identity.Ind
exOf("\")+1)}
+ CategoryInfo : InvalidOperation: (Split:String) [], RuntimeException
+ FullyQualifiedErrorId : MethodNotFound
Index operation failed; the array index evaluated to null.
At C:\Scripts\Get-ExchangeDBSizes.ps1:176 char:111
+ $ReturnedObj | Add-Member -MemberType NoteProperty -Name "White Space (GB)" -Value ("{0:n2}" -f ($whiteSpace[ <<<<
$dbasename]/1024))
+ CategoryInfo : InvalidOperation: (:) [], RuntimeException
+ FullyQualifiedErrorId : NullArrayIndex
Index operation failed; the array index evaluated to null.
At C:\Scripts\Get-ExchangeDBSizes.ps1:177 char:123
+ $ReturnedObj | Add-Member -MemberType NoteProperty -Name "Total Free (GB)" -Value ("{0:n2}" -f ($freespace + $whit
eSpace[ <<<< $dbasename]/1024))
+ CategoryInfo : InvalidOperation: (:) [], RuntimeException
+ FullyQualifiedErrorId : NullArrayIndex
Index operation failed; the array index evaluated to null.
At C:\Scripts\Get-ExchangeDBSizes.ps1:178 char:44
+ $TotalPercent = ($freespace + $whiteSpace[ <<<< $dbasename]/1024) / $total *100
+ CategoryInfo : InvalidOperation: (:) [], RuntimeException
+ FullyQualifiedErrorId : NullArrayIndex
Get-ChildItem : Cannot find path '\\STRSEXCH1\O$\Program Files\Microsoft\Exchange Server\Mailbox\Fourth Storage Group\Ma
ilbox Database.edb' because it does not exist.
At C:\Scripts\Get-ExchangeDBSizes.ps1:141 char:28
+ $dbsize = Get-ChildItem <<<< $path
+ CategoryInfo : ObjectNotFound: (\\STRSEXCH1\O$\…ox Database.edb:String) [Get-ChildItem], ItemNotFoundE
xception
+ FullyQualifiedErrorId : PathNotFound,Microsoft.PowerShell.Commands.GetChildItemCommand
Get-MailboxStatistics : Cannot bind parameter 'Database'. Cannot convert value "STRSEXCH1\Program Files\Microsoft\Exchan
ge Server\Mailbox\Fourth Storage Group\Mailbox Databas" to type "Microsoft.Exchange.Configuration.Tasks.DatabaseIdParame
ter". Error: "'STRSEXCH1\Program Files\Microsoft\Exchange Server\Mailbox\Fourth Storage Group\Mailbox Databas' is not a
valid value for the identity.
Parameter name: Identity"
At C:\Scripts\Get-ExchangeDBSizes.ps1:160 char:50
+ $mailboxcount = Get-MailboxStatistics -database <<<< "$mailboxpath" |Where {$_.DisconnectDate -eq $null -and
$_.ObjectClass -eq 'Mailbox'} |measure-object
+ CategoryInfo : InvalidArgument: (:) [Get-MailboxStatistics], ParameterBindingException
+ FullyQualifiedErrorId : CannotConvertArgumentNoMessage,Microsoft.Exchange.Management.MapiTasks.GetMailboxStatisti
cs
Method invocation failed because [Microsoft.Exchange.Data.Directory.ADObjectId] doesn't contain a method named 'Split'.
At C:\Scripts\Get-ExchangeDBSizes.ps1:174 char:29
+ if ($objitem.Identity.Split <<<< ("\").Count -eq 3){$dbasename = $objitem.Identity.Substring($objitem.Identity.Ind
exOf("\")+1)}
+ CategoryInfo : InvalidOperation: (Split:String) [], RuntimeException
+ FullyQualifiedErrorId : MethodNotFound
Index operation failed; the array index evaluated to null.
At C:\Scripts\Get-ExchangeDBSizes.ps1:176 char:111
+ $ReturnedObj | Add-Member -MemberType NoteProperty -Name "White Space (GB)" -Value ("{0:n2}" -f ($whiteSpace[ <<<<
$dbasename]/1024))
+ CategoryInfo : InvalidOperation: (:) [], RuntimeException
+ FullyQualifiedErrorId : NullArrayIndex
Index operation failed; the array index evaluated to null.
At C:\Scripts\Get-ExchangeDBSizes.ps1:177 char:123
+ $ReturnedObj | Add-Member -MemberType NoteProperty -Name "Total Free (GB)" -Value ("{0:n2}" -f ($freespace + $whit
eSpace[ <<<< $dbasename]/1024))
+ CategoryInfo : InvalidOperation: (:) [], RuntimeException
+ FullyQualifiedErrorId : NullArrayIndex
Index operation failed; the array index evaluated to null.
At C:\Scripts\Get-ExchangeDBSizes.ps1:178 char:44
+ $TotalPercent = ($freespace + $whiteSpace[ <<<< $dbasename]/1024) / $total *100
+ CategoryInfo : InvalidOperation: (:) [], RuntimeException
+ FullyQualifiedErrorId : NullArrayIndex
Get-ChildItem : Cannot find path '\\STRSEXCH1\Q$\Program Files\Microsoft\Exchange Server\Mailbox\Fifth Storage Group\Mai
lbox Database.edb' because it does not exist.
At C:\Scripts\Get-ExchangeDBSizes.ps1:141 char:28
+ $dbsize = Get-ChildItem <<<< $path
+ CategoryInfo : ObjectNotFound: (\\STRSEXCH1\Q$\…ox Database.edb:String) [Get-ChildItem], ItemNotFoundE
xception
+ FullyQualifiedErrorId : PathNotFound,Microsoft.PowerShell.Commands.GetChildItemCommand
Get-MailboxStatistics : Cannot bind parameter 'Database'. Cannot convert value "STRSEXCH1\Program Files\Microsoft\Exchan
ge Server\Mailbox\Fifth Storage Group\Mailbox Databas" to type "Microsoft.Exchange.Configuration.Tasks.DatabaseIdParamet
er". Error: "'STRSEXCH1\Program Files\Microsoft\Exchange Server\Mailbox\Fifth Storage Group\Mailbox Databas' is not a va
lid value for the identity.
Parameter name: Identity"
At C:\Scripts\Get-ExchangeDBSizes.ps1:160 char:50
+ $mailboxcount = Get-MailboxStatistics -database <<<< "$mailboxpath" |Where {$_.DisconnectDate -eq $null -and
$_.ObjectClass -eq 'Mailbox'} |measure-object
+ CategoryInfo : InvalidArgument: (:) [Get-MailboxStatistics], ParameterBindingException
+ FullyQualifiedErrorId : CannotConvertArgumentNoMessage,Microsoft.Exchange.Management.MapiTasks.GetMailboxStatisti
cs
Method invocation failed because [Microsoft.Exchange.Data.Directory.ADObjectId] doesn't contain a method named 'Split'.
At C:\Scripts\Get-ExchangeDBSizes.ps1:174 char:29
+ if ($objitem.Identity.Split <<<< ("\").Count -eq 3){$dbasename = $objitem.Identity.Substring($objitem.Identity.Ind
exOf("\")+1)}
+ CategoryInfo : InvalidOperation: (Split:String) [], RuntimeException
+ FullyQualifiedErrorId : MethodNotFound
Index operation failed; the array index evaluated to null.
At C:\Scripts\Get-ExchangeDBSizes.ps1:176 char:111
+ $ReturnedObj | Add-Member -MemberType NoteProperty -Name "White Space (GB)" -Value ("{0:n2}" -f ($whiteSpace[ <<<<
$dbasename]/1024))
+ CategoryInfo : InvalidOperation: (:) [], RuntimeException
+ FullyQualifiedErrorId : NullArrayIndex
Index operation failed; the array index evaluated to null.
At C:\Scripts\Get-ExchangeDBSizes.ps1:177 char:123
+ $ReturnedObj | Add-Member -MemberType NoteProperty -Name "Total Free (GB)" -Value ("{0:n2}" -f ($freespace + $whit
eSpace[ <<<< $dbasename]/1024))
+ CategoryInfo : InvalidOperation: (:) [], RuntimeException
+ FullyQualifiedErrorId : NullArrayIndex
Index operation failed; the array index evaluated to null.
At C:\Scripts\Get-ExchangeDBSizes.ps1:178 char:44
+ $TotalPercent = ($freespace + $whiteSpace[ <<<< $dbasename]/1024) / $total *100
+ CategoryInfo : InvalidOperation: (:) [], RuntimeException
+ FullyQualifiedErrorId : NullArrayIndex
Get-ChildItem : Cannot find path '\\STRSEXCH1\R$\Program Files\Microsoft\Exchange Server\Mailbox\Sixth Storage Group\Mai
lbox Database.edb' because it does not exist.
At C:\Scripts\Get-ExchangeDBSizes.ps1:141 char:28
+ $dbsize = Get-ChildItem <<<< $path
+ CategoryInfo : ObjectNotFound: (\\STRSEXCH1\R$\…ox Database.edb:String) [Get-ChildItem], ItemNotFoundE
xception
+ FullyQualifiedErrorId : PathNotFound,Microsoft.PowerShell.Commands.GetChildItemCommand
Get-MailboxStatistics : Cannot bind parameter 'Database'. Cannot convert value "STRSEXCH1\Program Files\Microsoft\Exchan
ge Server\Mailbox\Sixth Storage Group\Mailbox Databas" to type "Microsoft.Exchange.Configuration.Tasks.DatabaseIdParamet
er". Error: "'STRSEXCH1\Program Files\Microsoft\Exchange Server\Mailbox\Sixth Storage Group\Mailbox Databas' is not a va
lid value for the identity.
Parameter name: Identity"
At C:\Scripts\Get-ExchangeDBSizes.ps1:160 char:50
+ $mailboxcount = Get-MailboxStatistics -database <<<< "$mailboxpath" |Where {$_.DisconnectDate -eq $null -and
$_.ObjectClass -eq 'Mailbox'} |measure-object
+ CategoryInfo : InvalidArgument: (:) [Get-MailboxStatistics], ParameterBindingException
+ FullyQualifiedErrorId : CannotConvertArgumentNoMessage,Microsoft.Exchange.Management.MapiTasks.GetMailboxStatisti
cs
Method invocation failed because [Microsoft.Exchange.Data.Directory.ADObjectId] doesn't contain a method named 'Split'.
At C:\Scripts\Get-ExchangeDBSizes.ps1:174 char:29
+ if ($objitem.Identity.Split <<<< ("\").Count -eq 3){$dbasename = $objitem.Identity.Substring($objitem.Identity.Ind
exOf("\")+1)}
+ CategoryInfo : InvalidOperation: (Split:String) [], RuntimeException
+ FullyQualifiedErrorId : MethodNotFound
Index operation failed; the array index evaluated to null.
At C:\Scripts\Get-ExchangeDBSizes.ps1:176 char:111
+ $ReturnedObj | Add-Member -MemberType NoteProperty -Name "White Space (GB)" -Value ("{0:n2}" -f ($whiteSpace[ <<<<
$dbasename]/1024))
+ CategoryInfo : InvalidOperation: (:) [], RuntimeException
+ FullyQualifiedErrorId : NullArrayIndex
Index operation failed; the array index evaluated to null.
At C:\Scripts\Get-ExchangeDBSizes.ps1:177 char:123
+ $ReturnedObj | Add-Member -MemberType NoteProperty -Name "Total Free (GB)" -Value ("{0:n2}" -f ($freespace + $whit
eSpace[ <<<< $dbasename]/1024))
+ CategoryInfo : InvalidOperation: (:) [], RuntimeException
+ FullyQualifiedErrorId : NullArrayIndex
Index operation failed; the array index evaluated to null.
At C:\Scripts\Get-ExchangeDBSizes.ps1:178 char:44
+ $TotalPercent = ($freespace + $whiteSpace[ <<<< $dbasename]/1024) / $total *100
+ CategoryInfo : InvalidOperation: (:) [], RuntimeException
+ FullyQualifiedErrorId : NullArrayIndex
Get-ChildItem : Cannot find path '\\STRSEXCH1\S$\Program Files\Microsoft\Exchange Server\Mailbox\Seventh Storage Group\M
ailbox Database.edb' because it does not exist.
At C:\Scripts\Get-ExchangeDBSizes.ps1:141 char:28
+ $dbsize = Get-ChildItem <<<< $path
+ CategoryInfo : ObjectNotFound: (\\STRSEXCH1\S$\…ox Database.edb:String) [Get-ChildItem], ItemNotFoundE
xception
+ FullyQualifiedErrorId : PathNotFound,Microsoft.PowerShell.Commands.GetChildItemCommand
Get-MailboxStatistics : Cannot bind parameter 'Database'. Cannot convert value "STRSEXCH1\Program Files\Microsoft\Exchan
ge Server\Mailbox\Seventh Storage Group\Mailbox Databas" to type "Microsoft.Exchange.Configuration.Tasks.DatabaseIdParam
eter". Error: "'STRSEXCH1\Program Files\Microsoft\Exchange Server\Mailbox\Seventh Storage Group\Mailbox Databas' is not
a valid value for the identity.
Parameter name: Identity"
At C:\Scripts\Get-ExchangeDBSizes.ps1:160 char:50
+ $mailboxcount = Get-MailboxStatistics -database <<<< "$mailboxpath" |Where {$_.DisconnectDate -eq $null -and
$_.ObjectClass -eq 'Mailbox'} |measure-object
+ CategoryInfo : InvalidArgument: (:) [Get-MailboxStatistics], ParameterBindingException
+ FullyQualifiedErrorId : CannotConvertArgumentNoMessage,Microsoft.Exchange.Management.MapiTasks.GetMailboxStatisti
cs
Method invocation failed because [Microsoft.Exchange.Data.Directory.ADObjectId] doesn't contain a method named 'Split'.
At C:\Scripts\Get-ExchangeDBSizes.ps1:174 char:29
+ if ($objitem.Identity.Split <<<< ("\").Count -eq 3){$dbasename = $objitem.Identity.Substring($objitem.Identity.Ind
exOf("\")+1)}
+ CategoryInfo : InvalidOperation: (Split:String) [], RuntimeException
+ FullyQualifiedErrorId : MethodNotFound
Index operation failed; the array index evaluated to null.
At C:\Scripts\Get-ExchangeDBSizes.ps1:176 char:111
+ $ReturnedObj | Add-Member -MemberType NoteProperty -Name "White Space (GB)" -Value ("{0:n2}" -f ($whiteSpace[ <<<<
$dbasename]/1024))
+ CategoryInfo : InvalidOperation: (:) [], RuntimeException
+ FullyQualifiedErrorId : NullArrayIndex
Index operation failed; the array index evaluated to null.
At C:\Scripts\Get-ExchangeDBSizes.ps1:177 char:123
+ $ReturnedObj | Add-Member -MemberType NoteProperty -Name "Total Free (GB)" -Value ("{0:n2}" -f ($freespace + $whit
eSpace[ <<<< $dbasename]/1024))
+ CategoryInfo : InvalidOperation: (:) [], RuntimeException
+ FullyQualifiedErrorId : NullArrayIndex
Index operation failed; the array index evaluated to null.
At C:\Scripts\Get-ExchangeDBSizes.ps1:178 char:44
+ $TotalPercent = ($freespace + $whiteSpace[ <<<< $dbasename]/1024) / $total *100
+ CategoryInfo : InvalidOperation: (:) [], RuntimeException
+ FullyQualifiedErrorId : NullArrayIndex
I figure it has somthing to do with the path but when I run Get-Mailboxserver -Identity strsexch1 |Get-MailboxDatabase |fl edbfilepath I get:
EdbFilePath : M:\Program Files\Microsoft\Exchange Server\Mailbox\First Storage
Group\Mailbox Database.edb
EdbFilePath : N:\Program Files\Microsoft\Exchange Server\Mailbox\Third Storage
Group\Mailbox Database.edb
EdbFilePath : O:\Program Files\Microsoft\Exchange Server\Mailbox\Fourth Storage
Group\Mailbox Database.edb
EdbFilePath : Q:\Program Files\Microsoft\Exchange Server\Mailbox\Fifth Storage
Group\Mailbox Database.edb
EdbFilePath : R:\Program Files\Microsoft\Exchange Server\Mailbox\Sixth Storage
Group\Mailbox Database.edb
EdbFilePath : S:\Program Files\Microsoft\Exchange Server\Mailbox\Seventh Storag
e Group\Mailbox Database.edb
Thanks,
David
#24 by David on March 24, 2011 - 13:15
nevermind I was able to tweak the script to get it to work for my server. Thanks.
#25 by JU on April 21, 2011 - 07:22
hi David, would you mind posting your tweaked scripts please 🙂
#26 by Albert on August 23, 2011 - 08:51
Hi,
is this script working for the Exchange Server 2007 CCR mode ?
#27 by Karl Mitschke on August 23, 2011 - 09:02
Albert;
I have no idea 🙂
Karl