This script will return database size, database usage, index space usage, the space of the log used and the log size. It assumes windows auth. Marginally tested, use at your own risk.
function Get-DatabaseSize{ <# .SYNOPSIS Scripts out database size properties .DESCRIPTION This module will script sql server database sizes for all databases on a given server instance .PARAMETER serverInstance The name of the sql server instance that the jobs reside on .PARAMETER IncludeSystemDBs Switch to include system databases in results .EXAMPLE Get database sizes for all databases including system databases Get-DatabaseSize -serverInstance 'InstanceName' -IncludeSystemDBs .EXAMPLE Get database sizes for all databases via pipeline @('instance1', 'instance2', 'instance3') | Get-DatabaseSize -IncludeSystemDBs .NOTES This assumes that you have access to the sql server via windows-authentication. #> param( [Parameter(Mandatory=$true,Position=0,ValueFromPipeline=$true)] [string]$serverInstance, [Parameter(Mandatory=$false,Position=1,ValueFromPipeline=$false)] [switch]$IncludeSystemDBs ) begin{ $objects = @(); $srvConn = New-Object microsoft.SqlServer.Management.Common.ServerConnection $srvConn.LoginSecure = $true; $srvConn.ServerInstance = $serverInstance $server = New-Object microsoft.SqlServer.Management.Smo.Server $srvConn } process{ foreach($db in $server.Databases | where{$_.IsSystemObject -eq $IncludeSystemDBs -or -not $_.IsSystemObject}){ $logSize = 0; $UsedLogSpace = 0; foreach($log in $db.LogFiles){ $logSize += $log.Size $UsedLogSpace += $log.UsedSpace } $obj = New-Object -TypeName PSObject -Property @{ ServerInstance = $serverInstance DatabaseName = $db.Name DatabaseSizeMB = $db.Size DataSpaceUsageKB = $db.DataSpaceUsage IndexSpaceUsageKB = $db.IndexSpaceUsage UsedLogSpaceKB = $UsedLogSpace LogSizeKB = $logSize } $objects += $obj; } $objects | SELECT ServerInstance, DatabaseName, DatabaseSizeMB, DataSpaceUsageKB, IndexSpaceUsageKB, UsedLogSpaceKB, LogSizeKB } end{ $srvConn.Disconnect(); } }