Diese Frage steht schon seit einiger Zeit hier und Sie haben wahrscheinlich schon Ihre Antwort gefunden, aber für diejenigen, die nach einer einfachen Möglichkeit suchen, haben die aktuellen Versionen der SQL Server Powershell-Module native Befehle und Methoden, die diese Funktionalität von SMO unterstützen.
Sie können Get-SqlDatabase verwenden und Methoden wie .Script() und .EnumScript().
Dies generiert beispielsweise CREATE-Skripte für benutzerdefinierte Funktionen und speichert sie in der Datei:
$Database = Get-SqlDatabase -ServerInstance $YourSqlServer -Name $YourDatabaseName
$MyFuncs = $Database.UserDefinedFunctions | Where Schema -eq "dbo"
$MyFuncs.Script() | Out-File -FilePath ".\SqlScripts\MyFunctions.sql"
Wenn Sie Daten skripten möchten und Elemente wie Indizes, Schlüssel, Trigger usw. müssen Sie die Skriptoptionen wie folgt angeben:
$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"
Beachten Sie, dass die Methode Script() keine Skriptdaten unterstützt. Verwenden Sie EnumScript() für Tabellen.
Wenn Sie wie gefragt nur Daten skripten möchten, können Sie $scriptOptions.ScriptData = $True
versuchen und $scriptOptions.ScriptSchema = $False
.