Source Code
[CmdletBinding()] Param( [Parameter(Mandatory=$True,ValueFromPipeline=$true,HelpMessage="Enter Source Instance")] [ValidateScript({ IF( $_ -eq $null) {$false } elseif ($_.ToString().Trim().Length -eq 0 ) {$false} else {$true}} )] [string]$TargetInst, [Parameter(Mandatory=$True,ValueFromPipeline=$true,HelpMessage="Enter Source Source")] [ValidateScript({ IF( $_ -eq $null) {$false } elseif ($_.ToString().Trim().Length -eq 0 ) {$false} else {$true}} )] [string]$TargetDb, [Parameter(Mandatory=$True,ValueFromPipeline=$true)] [string]$Targetdir ) ## Add Assemblies add-type -AssemblyName "Microsoft.SqlServer.Smo, Version=10.0.0.0, Culture=neutral, PublicKeyToken=89845dcd8080cc91" -ErrorAction Stop Write-host $TargetInst $Targetdb $targetdir $sourcedbs = New-Object ('Microsoft.SqlServer.Management.Smo.Server') $TargetInst $sourcedbs.ConnectionContext.StatementTimeout = 0 $db = $sourcedbs.Databases[$TargetDB] $files = Get-ChildItem -Path "$Targetdir" -Recurse | Where-Object{$_.Name -Like "*.sql"} | select FullName Foreach($file in $files) { $query= Get-Content $file.FullName | Out-String ; try { $db.ExecuteNonQuery($query) Write-Host $file.FullName "Query Finished" } catch [Exception] { Write-Host $_.Exception.GetType().FullName, $_.Exception.Message } }
How to use it
.\ExecuteSqlscripts.ps1 ServerName DatabaseName Directory
Note: it does a recursive check if there any folders it gets them all as well.