functions/helpers/New-DBScripterObject.ps1
function New-DBScripterObject { <# .SYNOPSIS Creates a database scripting object that can be modified and used by Invoke-DBScriptObjects .DESCRIPTION Creates a database scripting object that can be modified and used by Invoke-DBScriptObjects .PARAMETER ServerInstance Specifies the database server hostname. .PARAMETER Credentials Specifies credentials to connect to the database with. If not supplied then a trusted connection will be used. .INPUTS None. You cannot pipe objects to this script. .OUTPUTS None. .EXAMPLE PS> $scripter = New-DBScripterObject -ServerInstance "ServerName" .LINK https://github.com/tcartwright/tcdbtools .NOTES Author: Tim Cartwright #> [CmdletBinding()] [Diagnostics.CodeAnalysis.SuppressMessageAttribute('PSUseShouldProcessForStateChangingFunctions', '', Justification='Not needed')] param ( [Parameter(Mandatory=$true)] [string]$ServerInstance, [pscredential]$Credentials ) begin { } process { $server = New-DBSMOServer -ServerInstance $ServerInstance -Credentials $Credentials $Scripter = New-Object "Microsoft.SqlServer.Management.Smo.Scripter" $Server #create the scripter # https://docs.microsoft.com/en-us/dotnet/api/microsoft.sqlserver.management.smo.scriptingoptions?view=sql-smo-160 $Scripter.Options.AllowSystemObjects = $false $Scripter.Options.AnsiFile = $true $Scripter.Options.AnsiPadding = $false # true = SET ANSI_PADDING statements $Scripter.Options.Default = $true $Scripter.Options.DriAll = $true $Scripter.Options.Encoding = New-Object "System.Text.ASCIIEncoding" $Scripter.Options.ExtendedProperties = $true $Scripter.Options.IncludeDatabaseContext = $false # true = USE <DatabaseName> statements $Scripter.Options.IncludeHeaders = $false $Scripter.Options.NoCollation = $false # true = don't script verbose collation info in table scripts $Scripter.Options.Permissions = $true $Scripter.Options.ScriptSchema = $true $Scripter.Options.SchemaQualify = $true $Scripter.Options.SchemaQualifyForeignKeysReferences = $true $Scripter.Options.ScriptDrops = $false $Scripter.Options.ToFileOnly = $true $Scripter.Options.Triggers = $true $Scripter.Options.Indexes = $true $Scripter.Options.XmlIndexes = $true $Scripter.Options.FullTextIndexes = $true $Scripter.Options.ClusteredIndexes = $true $Scripter.Options.NonClusteredIndexes = $true $Scripter.Options.WithDependencies = $false $Scripter.Options.ContinueScriptingOnError = $true } end { return $Scripter } } |