SQL Server SMO 和 PowerShell 格式

5 sql-server powershell smo functions

我可能已经看这个太久了,无法弄清楚这一点......

  1. 我可以将其导出为 CSV 格式的最简单方法是什么?
  2. 将它更容易地转储到数据库中的表会更好吗?我将从我有一个实例运行的中央服务器上运行它。

下面的函数用于提取有关 SQL Server 实例的一个或多个数据库的信息。到目前为止,我知道这适用于 SQL 2005 及更高版本。

我已经使用过,Format-Table但最终会切断列。我使用了Output-Filewhich 可以工作但默认为列表视图,这可能很难进入 Excel。它还会切断超过一定长度的列数据。

编辑:此功能的目的是针对 100 多台服务器运行它以收集每个实例的清单。

PowerShell 功能:


# Load SMO
[void][System.Reflection.Assembly]::LoadWithPartialName('Microsoft.SqlServer.SMO')

function Get-DatabaseInfo ($server,$dbname)
{
    $srv = New-Object 'Microsoft.SqlServer.Management.Smo.Server' $server

    $db = $srv.Databases.Item($dbname)

    $DataFile = $db | Select -ExpandProperty FileGroups | Select -ExpandProperty Files
    $LogFile = $db | Select -ExpandProperty LogFiles
    $tables = $db | Select -ExpandProperty tables | ? {$_.IsSystemObject -eq $false}
    $indexes = $tables | Select -ExpandProperty Indexes |  ? {$_.IsSystemObject -eq $false}

    $srv.Databases.Item($dbname) | Select @{Label="*****************Database Name*****************";Expression={$_.Name}}

    Write-Host "Database information for $dbname" -ForegroundColor red    
    $db |
        Select  @{Label="DateCaptured";Expression={Get-Date -Format yyyyMMdd-HHmm}},
            ID, Name, Owner, CreateDate, 
            CompatibilityLevel, RecoveryModel, 
            LastBackupDate, LastDifferentialBackupDate, LastLogBackupDate, LogReuseWaitStatus,
            ActiveConnections, 
            AutoClose, AutoShrink, 
            AutoCreateStatisticsEnabled, AutoUpdateStatisticsEnabled,
            Collation, 
            @{Label="DataSpaceUsage (KB)";Expression={$_.DataSpaceUsage}},
            @{Label="IndexSpaceUsage (KB)";Expression={$_.IndexSpaceUsage}},
            @{Label="SpaceAvailable (KB)";Expression={$_.SpaceAvailable}},
            @{Label="Size (MB)";Expression={$_.Size}},
            IsSQLCLREnabled,
            IsMirroringEnabled, PageVerify, ReplicationOptions

    Write-Host "Database File Level information for $dbname" -Foreground red
    $DataFile | Select  Name, Filename, Growth, GrowthType,
            @{Label="MaxSize (MB)";Expression={$value = $_.MaxSize; switch($value){-1 {"Unlimited"} default {"{0:N2}" -f($value/1024)}}}},
            @{Label="SizeAllocated (MB)";Expression={"{0:N2}" -f($_.Size/1024)}},
            @{Label="UsedSpace (MB)";Expression={"{0:N2}" -f($_.UsedSpace/1024)}},
            @{Label="Data % Full";Expression={"{0:N2}" -f(($_.UsedSpace/$_.Size) * 100)}},
            @{Label="Data Space Left (MB)";Expression={"{0:N2}" -f(($_.Size/1024)-($_.UsedSpace/1024))}},
            @{Label="Data % Available";Expression={"{0:N2}" -f((($_.Size/1024)-($_.UsedSpace/1024)) / ($_.Size/1024))}}

    $logfile | Select Name, Filename, Growth, GrowthType,
                @{Label="MaxSize (MB)";Expression={$value = $_.MaxSize; switch($value){-1 {"Unlimited"} default {"{0:N2}" -f($value)}}}},
                @{Label="SizeAllocated (MB)";Expression={"{0:N2}" -f($_.Size/1024)}},
                @{Label="UsedSpace (MB)";Expression={"{0:N2}" -f($_.UsedSpace/1024)}},
                @{Label="Log % Full";Expression={"{0:N2}" -f(($_.UsedSpace/$_.Size) * 100)}},
                @{Label="Log Space Left (MB)";Expression={"{0:N2}" -f(($_.Size/1024)-($_.UsedSpace/1024))}},
                @{Label="Log % Available";Expression={"{0:N2}" -f((($_.Size/1024)-($_.UsedSpace/1024)) / ($_.Size/1024))}}

    Write-Host "Table Information for $dbname" -ForegroundColor red
    $tables | Select @{Label="DateCaptured";Expression={Get-Date -Format yyyyMMdd-HHmm}}, Name, RowCount, HasClusteredIndex | 
        Sort-Object RowCount -Descending

    Write-Host "Table Indexes Information for $dbname" -ForegroundColor Red
    $indexes | Select Parent, Name, IndexKeyType, IndexedColumns, FillFactor, SortInTempdb

}
Run Code Online (Sandbox Code Playgroud)

小智 0

当涉及到 PowerShell 和 SQL Server 时,总是有不同的方法来执行或处理这种情况。我最终按照亚伦在评论中的建议将它们分开。

我不想删除这个问题,所以我只是以这种方式回答它,以防有人想使用提供的脚本。

如果主持人认为该问题最好删除,请务必继续。