Този въпрос е тук от известно време и вероятно вече сте намерили отговора си, но за тези, които търсят прост начин да направят това, текущите версии на SQL сървърните модули Powershell имат собствени команди и методи, които поддържат тази функционалност от SMO.
Можете да използвате Get-SqlDatabase и методи като .Script() и .EnumScript().
Например, това ще генерира скриптове CREATE за дефинирани от потребителя функции и ще ги запише във файл:
$Database = Get-SqlDatabase -ServerInstance $YourSqlServer -Name $YourDatabaseName
$MyFuncs = $Database.UserDefinedFunctions | Where Schema -eq "dbo"
$MyFuncs.Script() | Out-File -FilePath ".\SqlScripts\MyFunctions.sql"
Ако искате скриптови данни и елементи като индекси, ключове, тригери и т.н. ще трябва да посочите опциите за скриптове, като това:
$scriptOptions = New-Object -TypeName Microsoft.SqlServer.Management.Smo.ScriptingOptions
$scriptOptions.NoCollation = $True
$scriptOptions.Indexes = $True
$scriptOptions.Triggers = $True
$scriptOptions.DriAll = $True
$scriptOptions.ScriptData = $True
$Database.Tables.EnumScript($scriptOptions) | Out-File -FilePath ".\AllMyTables.sql"
Имайте предвид, че методът Script() не поддържа данни за скриптове. Използвайте EnumScript() за таблици.
Ако искате да скриптирате само данни, както е поискано, можете да опитате $scriptOptions.ScriptData = $True
и $scriptOptions.ScriptSchema = $False
.