diff --git a/backupmult.ps1 b/backupmult.ps1 index 051bffc..c18a041 100644 --- a/backupmult.ps1 +++ b/backupmult.ps1 @@ -167,7 +167,13 @@ EXECUTE [dbo].[DatabaseBackup] Write-Log "SQL Query: $query" # Function to execute backup job with message capture -function Start-BackupJob($jobId, $sqlInstance, $query, $baseLogFile) { +function Start-BackupJob { + param( + [int]$jobId, + [string]$sqlInstance, + [string]$query, + [string]$baseLogFile + ) $scriptBlock = { param($JobId, $SqlInstance, $Query, $BaseLogFile) @@ -184,21 +190,26 @@ function Start-BackupJob($jobId, $sqlInstance, $query, $baseLogFile) { Write-Output "DEBUG: Job log file will be: '$jobLogFile'" - function Write-JobLog($message) { + function Write-JobLog($message, $suppressConsole = $false) { $timestamp = Get-Date -Format "yyyy-MM-dd HH:mm:ss" $logEntry = "$timestamp [JOB-$JobId] $message" if ($jobLogFile -and $jobLogFile.Trim() -ne "") { try { Add-Content -Path $jobLogFile -Value $logEntry -Encoding UTF8 - # Output to console for debugging - Write-Output "LOGGED TO $jobLogFile : $logEntry" + # Output to console for debugging (unless suppressed) + if (-not $suppressConsole) { + Write-Output "LOGGED TO $jobLogFile : $logEntry" + } } catch { Write-Output "LOG ERROR: $($_.Exception.Message) - File: $jobLogFile" } } else { Write-Output "NO LOG FILE: jobLogFile is empty or null" } - Write-Output $logEntry + # Always output to console for job monitoring (unless suppressed) + if (-not $suppressConsole) { + Write-Output $logEntry + } } try { @@ -216,8 +227,7 @@ function Start-BackupJob($jobId, $sqlInstance, $query, $baseLogFile) { $message = $e.Message if ($message -and $message.Trim() -ne "") { $script:infoMessages += $message - Write-JobLog "SQL INFO: $message" - Write-Output "SQL INFO: $message" # Also output for Receive-Job + Write-JobLog "SQL INFO: $message" $true # Suppress console output for verbose messages } }) @@ -254,12 +264,12 @@ function Start-BackupJob($jobId, $sqlInstance, $query, $baseLogFile) { Write-JobLog $summaryMessage Write-Output $summaryMessage # Also output for Receive-Job - # Output all captured SQL messages for debugging - Write-Output "=== SQL MESSAGES START ===" + # Output all captured SQL messages for debugging (only to log file, not console) + Write-JobLog "=== SQL MESSAGES START ===" $true foreach ($msg in $infoMessages) { - Write-Output "SQL: $msg" + Write-JobLog "SQL: $msg" $true } - Write-Output "=== SQL MESSAGES END ===" + Write-JobLog "=== SQL MESSAGES END ===" $true # Don't return hashtable - just output success message Write-Output "JOB-${JobId}: SUCCESS" @@ -330,7 +340,7 @@ Write-Log "Starting $Jobs parallel backup jobs using DatabasesInParallel feature [System.Collections.ArrayList]$jobList = @() for ($i = 1; $i -le $Jobs; $i++) { - $job = Start-BackupJob -jobId $i -sqlInstance $SqlInstance -query $query -logFile $logFile + $job = Start-BackupJob -jobId $i -sqlInstance $SqlInstance -query $query -baseLogFile $logFile $null = $jobList.Add($job) Write-Log "Started backup job $i (Job ID: $($job.Id))" Start-Sleep -Milliseconds 100 # Small delay to stagger job starts