5 sql-server powershell smo functions
我可能已经看这个太久了,无法弄清楚这一点......
下面的函数用于提取有关 SQL Server 实例的一个或多个数据库的信息。到目前为止,我知道这适用于 SQL 2005 及更高版本。
我已经使用过,Format-Table
但最终会切断列。我使用了Output-File
which 可以工作但默认为列表视图,这可能很难进入 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 时,总是有不同的方法来执行或处理这种情况。我最终按照亚伦在评论中的建议将它们分开。
我不想删除这个问题,所以我只是以这种方式回答它,以防有人想使用提供的脚本。
如果主持人认为该问题最好删除,请务必继续。