Tato otázka tu byla nějakou dobu a pravděpodobně jste již našli svou odpověď, ale pro ty, kteří hledají jednoduchý způsob, jak to udělat, aktuální verze modulů SQL serveru Powershell mají nativní příkazy a metody, které tuto funkci podporují od SMO.
Můžete použít Get-SqlDatabase a metody jako .Script() a .EnumScript().
Například to vygeneruje CREATE skripty pro uživatelem definované funkce a uloží je do souboru:
$Database = Get-SqlDatabase -ServerInstance $YourSqlServer -Name $YourDatabaseName
$MyFuncs = $Database.UserDefinedFunctions | Where Schema -eq "dbo"
$MyFuncs.Script() | Out-File -FilePath ".\SqlScripts\MyFunctions.sql"
Pokud chcete skriptovat data a prvky, jako jsou indexy, klíče, spouštěče atd., budete muset zadat možnosti skriptování, například takto:
$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"
Všimněte si, že metoda Script() nepodporuje skriptovací data. Pro tabulky použijte EnumScript().
Pokud chcete skriptovat pouze data, jak je požadováno, můžete zkusit $scriptOptions.ScriptData = $True
a $scriptOptions.ScriptSchema = $False
.