Friday, July 1, 2016

Shrink SQL DBs with PowerShell

Here's a little nugget that will iterate over DBs larger than specified size, and shrink them.

$shrinkDBsLargerThan = 50
[System.Reflection.Assembly]::LoadWithPartialName('Microsoft.SqlServer.SMO') | Out-Null
$sqlsrv = New-Object Microsoft.SqlServer.Management.Smo.Server("(local)")
$db = New-Object Microsoft.SqlServer.Management.Smo.Database
$sqlsrv.Databases | ? Size -GT $shrinkDBsLargerThan | % {
    Write-Host "DB: $($_.Name)"
    Write-Host "`tInitial Size(MB): $($_.Size)"
    $_.Shrink(20, [Microsoft.SqlServer.Management.Smo.ShrinkMethod]'Default')
    $_.Refresh()
    Write-Host "`t Shrunk Size(MB): $($_.Size)"
}

No comments: