• Thanks mrrobsewell & Leonard. Both solutions are good. thank you.

    @mrrobsewell - I need a small help. Considering Leonard solution, how can format in such a way so that Report, should be as follows.

    Also I wanted to put a background color with YELLOW for top 3 records for all databases for the column "Total Size MB". How can I do that? Could you please help?

    Server1

    Table grid with all data specific to that server

    --// 1 or 2 Empty rows

    Server2

    Table grid with all data specific to that server

    // 1 or 2 Empty rows

    Server3

    Table grid with all data specific to that server

    Complete code I am using :

    =========================

    [System.Reflection.Assembly]::LoadWithPartialName("Microsoft.SqlServer.SMO") | Out-Null

    #clear

    $InstanceList = @()

    $RowData = @()

    $SQLText = @"

    SELECT DISTINCT TOP 10 @@SERVERNAME AS InstanceName,

    DB_NAME() AS DatabaseName

    ,s.Name AS SchemaName

    ,object_name(i.object_id) AS TableName

    , i.index_id AS IndexID

    , i.type_desc AS IndexType

    ,p.data_compression_desc

    , p.[rows] AS NumRows

    , CAST((au.total_pages * 8/1024.) AS numeric(15,2)) AS TotalSizeMB

    , CAST((au.total_pages * 8/(1024.*1024)) AS numeric(15,2)) AS TotalSizeGB

    FROM sys.indexes i INNER JOIN sys.partitions p ON i.object_id = p.object_id AND i.index_id = p.index_id

    INNER JOIN sys.tables t ON t.OBJECT_ID = i.object_id

    INNER JOIN sys.allocation_units au ON

    CASE

    WHEN au.[type] in (1,3) THEN p.hobt_id

    WHEN au.type = 2 THEN p.partition_id

    end = au.container_id

    INNER JOIN sys.objects o ON i.object_id = o.object_id

    INNER JOIN sys.filegroups f ON i.data_space_id = f.data_space_id

    INNER JOIN [sys].[database_files] d ON f.[data_space_id] = d.[data_space_id]

    LEFT OUTER JOIN sys.schemas s ON t.schema_id = s.schema_id

    Where t.type_desc ='USER_TABLE'

    and i.index_id in (0,1) --- 0 -- heaps tbls , 1 -- clustered indexes

    and au.total_pages > 0

    and o.is_ms_shipped <> 1

    ORDER BY TotalSizeMB DESC

    "@

    $InstanceList = "TESTSRV"

    FOREACH ($InstanceName in $InstanceList)

    {

    Try

    {

    $Instance = New-Object ('Microsoft.SqlServer.Management.Smo.Server') $InstanceName

    $DBList = $Instance.Databases | Where-Object { !($_.IsSystemObject) }

    # Loop

    ForEach ($DB in $DBList)

    {

    $ds = $DB.ExecuteWithResults($SQLText)

    Foreach ($Row in (($ds.Tables[0]).Rows))

    {

    $RowData += $Row | SELECT InstanceName, DatabaseName, SchemaName, TableName, IndexID, IndexType, data_compression_desc, NumRows, TotalSizeMB, TotalSizeGB

    }

    }

    }

    catch [Exception]

    {

    Write-Host "$_.Exception.GetType().FullName, $_.Exception.Message" -ForegroundColor Red

    }

    }

    # Output to Write-Host

    #$RowData

    # Format for HTML

    $a = "<style>"

    $a = $a + "BODY{background-color:peachpuff;}"

    $a = $a + "TABLE{font-family: Arial;font-size: 8pt;width:100%; height:75%; border-width: 1px;border-style: solid;border-color: black;border-collapse: collapse;}"

    $a = $a + "TH{border-width: 1px;padding: 0px;border-style: solid;border-color: black;background-color:thistle}"

    $a = $a + "TD{border-width: 1px;padding: 0px;border-style: solid;border-color: black;background-color:PaleGoldenrod}"

    $a = $a + "</style>"

    # Output to HTML File

    $RowData | SELECT @{Name='Instance Name';Expression={$_.InstanceName}}, @{Name='Database Name';Expression={$_.DatabaseName}}, @{Name='Schema Name';Expression={$_.SchemaName}}, @{Name='Table Name';Expression={$_.TableName}}, @{Name='Index ID';Expression={$_.IndexID}}, @{Name='Index Type';Expression={$_.IndexType}}, @{Name='Data Compress Desc';Expression={$_.data_compression_desc}}, @{Name='Number of Rows';Expression={$_.NumRows}}, @{Name='Total Size MB';Expression={$_.TotalSizeMB}}, @{Name='Total Size GB';Expression={$_.TotalSizeGB}} | ConvertTo-HTML -head "<H2>Top Table List</H2>" -body $a | Out-File C:\Temp\TableList.html

    $EmailFrom = "xxxxx@gmail.com"

    $EmailTo = "zzzzz@gmail.com"

    $Subject = "Top 10 table list "

    $Body = get-content ("C:\Temp\TableList.html")

    #$Body = $RowData | SELECT @{Name='Instance Name';Expression={$_.InstanceName}}, @{Name='Database Name';Expression={$_.DatabaseName}}, @{Name='Schema Name';Expression={$_.SchemaName}} | ConvertTo-HTML -head "<H2>Top Table List</H2>" -body $a

    $SMTPServer = "smtp.gmail.com"

    $SMTPClient = New-Object Net.Mail.SmtpClient($SmtpServer, 587)

    $SMTPClient.EnableSsl = $true

    $SMTPClient.Credentials = New-Object System.Net.NetworkCredential("xxxxx@gmail.com", "cpwdded#123");

    $SMTPClient.Send($EmailFrom, $EmailTo, $Subject, $Body)

    Thanks,

    Sam