@@ -568,6 +568,14 @@ try {
568568 $triggersDeployed = Get-SortedTrigger - DataFactoryName $DataFactoryName - ResourceGroupName $ResourceGroupName
569569
570570 if ($PreDeployment -eq $true ) {
571+
572+ # New: Store the running triggers before stopping any trigger
573+ $triggersRunning = $triggersDeployed | Where-Object { $_.RuntimeState -eq ' Started' } | ForEach-Object { $_.Name }
574+ # New: Persist to file (JSON) so that we can use this list to find the triggers need to be started during post-deployment (same job reuse)
575+ $triggersRunningJson = ($triggersRunning | ConvertTo-Json - Depth 10 - Compress)
576+ $stateFile = Join-Path $env: System_DefaultWorkingDirectory ' TriggersRunning.json'
577+ Set-Content - Path $stateFile - Value $triggersRunningJson - Encoding UTF8
578+
571579 # Stop trigger only if there is change in payload
572580 $triggersToStop = $triggersDeployed | Where-Object { $_.Name -in $triggerNamesInTemplate -and $_.RuntimeState -ne ' Stopped' } `
573581 | Where-Object {
@@ -724,8 +732,17 @@ try {
724732 }
725733
726734 # Start active triggers - after cleanup efforts
727- $triggersRunning = $triggersDeployed | Where-Object { $_.RuntimeState -eq ' Started' } | ForEach-Object { $_.Name }
728735
736+ # Read the file stored from pre-deployment script
737+ $stateFile = Join-Path $env: System_DefaultWorkingDirectory ' TriggersRunning.json'
738+ if (Test-Path $stateFile ) {
739+ $triggersRunning = Get-Content $stateFile | ConvertFrom-Json
740+ Write-Host " Loaded triggers from file: $ ( $triggersRunning -join ' ,' ) "
741+ } else {
742+ Write-Host " State file not found; fallback to original method to retrieve triggers in started status in template."
743+ $triggersRunning = $triggersDeployed | Where-Object { $_.RuntimeState -eq ' Started' } | ForEach-Object { $_.Name }
744+ }
745+ # Get updated trigger from template
729746 $updatedTriggersInTemplate = $triggersInTemplate
730747 if ($PSCompatible ) {
731748 try {
@@ -739,13 +756,35 @@ try {
739756 }
740757 }
741758
742- $triggersToStart = $updatedTriggersInTemplate | Where-Object { $_.properties.runtimeState -eq ' Started' -and $_.name.Substring (37 , $_.name.Length - 40 ) -notin $triggersRunning } `
743- | Where-Object { $_.properties.pipelines.Count -gt 0 -or $_.properties.pipeline.pipelineReference -ne $null } | ForEach-Object {
744- New-Object PSObject - Property @ {
745- Name = $_.name.Substring (37 , $_.name.Length - 40 )
746- TriggerType = $_.Properties.type
759+ # Build a unified set of trigger names: (Started in template) OR (previously running)
760+ # Force array materialization so + performs array concatenation, not string concatenation
761+ $triggerNamesFromTemplate = @ (
762+ $updatedTriggersInTemplate |
763+ Where-Object { $_.properties.runtimeState -eq ' Started' } |
764+ ForEach-Object { $_.name.Substring (37 , $_.name.Length - 40 ) }
765+ )
766+
767+ Write-Host " Trigger names from template with runtimeState 'Started': $ ( $triggerNamesFromTemplate -join ' ,' ) "
768+ Write-Host " Triggers previously running before deployment: $ ( $triggersRunning -join ' ,' ) "
769+
770+ $triggersRunning = @ ($triggersRunning ) # ensure array even if single value
771+ $triggerNamesToStart = @ ($triggerNamesFromTemplate ) + @ ($triggersRunning )
772+ $triggerNamesToStart = $triggerNamesToStart | Sort-Object - Unique
773+
774+ Write-Host " Final trigger names to start: $ ( $triggerNamesToStart -join ' ,' ) "
775+
776+ $triggersToStart = $updatedTriggersInTemplate |
777+ Where-Object {
778+ $name = $_.name.Substring (37 , $_.name.Length - 40 )
779+ $name -in $triggerNamesToStart
780+ } |
781+ Where-Object { $_.properties.pipelines.Count -gt 0 -or $_.properties.pipeline.pipelineReference -ne $null } |
782+ ForEach-Object {
783+ New-Object PSObject - Property @ {
784+ Name = $_.name.Substring (37 , $_.name.Length - 40 )
785+ TriggerType = $_.Properties.type
786+ }
747787 }
748- }
749788
750789 if ($triggersToStart.Count -gt 0 ) {
751790 Write-Host " Starting $ ( $triggersToStart.Count ) triggers"
0 commit comments