@@ -227,12 +227,23 @@ function Export-DbaScript {
227227 Write-Message - Level Warning - Message " Support for $shorttype is limited at this time."
228228 }
229229
230+ $dagScript = $null
230231 if ($shorttype -eq " AvailabilityGroup" ) {
231- Write-Message - Level Verbose - Message " Invoking .Script() as a workaround for https://github.com/dataplat/dbatools/issues/5913."
232- try {
233- $null = $InputObject.Script ()
234- } catch {
235- Write-Message - Level Verbose - Message " Invoking .Script() failed: $_ "
232+ if ((Get-Member - InputObject $object - Name IsDistributedAvailabilityGroup - ErrorAction SilentlyContinue) -and $object.IsDistributedAvailabilityGroup ) {
233+ Write-Message - Level Verbose - Message " Detected Distributed Availability Group '$ ( $object.Name ) '. Generating T-SQL script manually as SMO scripting does not support Distributed AGs."
234+ $dagReplicaScripts = foreach ($replica in $object.AvailabilityReplicas ) {
235+ $availMode = if ($replica.AvailabilityMode -eq " SynchronousCommit" ) { " SYNCHRONOUS_COMMIT" } else { " ASYNCHRONOUS_COMMIT" }
236+ $seedMode = if ($replica.SeedingMode -eq " Automatic" ) { " AUTOMATIC" } else { " MANUAL" }
237+ " N'$ ( $replica.Name ) ' WITH$eol ($eol LISTENER_URL = N'$ ( $replica.EndpointUrl ) ',$eol AVAILABILITY_MODE = $availMode ,$eol FAILOVER_MODE = MANUAL,$eol SEEDING_MODE = $seedMode$eol )"
238+ }
239+ $dagScript = " CREATE AVAILABILITY GROUP [$ ( $object.Name ) ]$eol WITH (DISTRIBUTED)$eol AVAILABILITY GROUP ON$eol $ ( $dagReplicaScripts -join " ,$eol " ) ;"
240+ } else {
241+ Write-Message - Level Verbose - Message " Invoking .Script() as a workaround for https://github.com/dataplat/dbatools/issues/5913."
242+ try {
243+ $null = $InputObject.Script ()
244+ } catch {
245+ Write-Message - Level Verbose - Message " Invoking .Script() failed: $_ "
246+ }
236247 }
237248 }
238249
@@ -295,14 +306,14 @@ function Export-DbaScript {
295306 if ($Passthru ) {
296307 if ($ScriptingOptionsObject ) {
297308 $ScriptingOptionsObject.FileName = $null
298- foreach ($scriptpart in $ scripter.EnumScript ($object )) {
309+ foreach ($scriptpart in @ ( if ( $dagScript ) { $dagScript } else { $ scripter.EnumScript ($object ) } )) {
299310 if ($scriptBatchTerminator ) {
300311 $scriptpart = " $scriptpart$eol$BatchSeparator$eol "
301312 }
302313 $scriptpart | Out-String
303314 }
304315 } else {
305- foreach ($scriptpart in $ scripter.EnumScript ($object )) {
316+ foreach ($scriptpart in @ ( if ( $dagScript ) { $dagScript } else { $ scripter.EnumScript ($object ) } )) {
306317 if ($BatchSeparator ) {
307318 $scriptpart = " $scriptpart$eol$BatchSeparator$eol "
308319 } else {
@@ -320,10 +331,14 @@ function Export-DbaScript {
320331 if (-not $ScriptingOptionsObject.FileName ) {
321332 $ScriptingOptionsObject.FileName = $scriptPath
322333 }
323- $null = $object.Script ($ScriptingOptionsObject )
334+ if ($dagScript ) {
335+ " $dagScript$eol$BatchSeparator$eol " | Out-File - FilePath $ScriptingOptionsObject.FileName - Encoding $encoding - Append
336+ } else {
337+ $null = $object.Script ($ScriptingOptionsObject )
338+ }
324339 } else {
325340 $ScriptingOptionsObject.FileName = $null
326- $scriptInFull = foreach ($scriptpart in $ scripter.EnumScript ($object )) {
341+ $scriptInFull = foreach ($scriptpart in @ ( if ( $dagScript ) { $dagScript } else { $ scripter.EnumScript ($object ) } )) {
327342 if ($BatchSeparator ) {
328343 $scriptpart = " $scriptpart$eol$BatchSeparator$eol "
329344 } else {
@@ -334,7 +349,7 @@ function Export-DbaScript {
334349 $scriptInFull | Out-File - FilePath $scriptPath - Encoding $encoding - Append
335350 }
336351 } else {
337- $scriptInFull = foreach ($scriptpart in $ scripter.EnumScript ($object )) {
352+ $scriptInFull = foreach ($scriptpart in @ ( if ( $dagScript ) { $dagScript } else { $ scripter.EnumScript ($object ) } )) {
338353 if ($BatchSeparator ) {
339354 $scriptpart = " $scriptpart$eol$BatchSeparator$eol "
340355 } else {
0 commit comments