diff --git a/CHANGELOG.md b/CHANGELOG.md index a840d8f5c8..7b8fca5f19 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -12,6 +12,9 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 - Fixed Azure DevOps pipeline conditions that were preventing DSC resource integration tests from running when they should by removing incorrect quotes around boolean values. +- Refactored error handling by removing global `$ErrorActionPreference = 'Stop'` + from 64 PowerShell files and implementing targeted error control for specific + command calls that use `-ErrorAction 'Stop'`. - `SqlAgentAlert` - Minor fix in `source/Classes/020.SqlAgentAlert.ps1` to correct `ExcludeDscProperties` formatting (added missing delimiter). diff --git a/source/Private/Get-FileVersionInformation.ps1 b/source/Private/Get-FileVersionInformation.ps1 index 76f5c57685..b412ec533d 100644 --- a/source/Private/Get-FileVersionInformation.ps1 +++ b/source/Private/Get-FileVersionInformation.ps1 @@ -34,8 +34,14 @@ function Get-FileVersionInformation process { + $originalErrorActionPreference = $ErrorActionPreference + + $ErrorActionPreference = 'Stop' + $file = Get-Item -Path $FilePath -ErrorAction 'Stop' + $ErrorActionPreference = $originalErrorActionPreference + if ($file.PSIsContainer) { $PSCmdlet.ThrowTerminatingError( diff --git a/source/Private/Invoke-ReportServerSetupAction.ps1 b/source/Private/Invoke-ReportServerSetupAction.ps1 index 1e56053a88..1058c620f4 100644 --- a/source/Private/Invoke-ReportServerSetupAction.ps1 +++ b/source/Private/Invoke-ReportServerSetupAction.ps1 @@ -205,8 +205,14 @@ function Invoke-ReportServerSetupAction $ConfirmPreference = 'None' } + $originalErrorActionPreference = $ErrorActionPreference + + $ErrorActionPreference = 'Stop' + Assert-ElevatedUser -ErrorAction 'Stop' + $ErrorActionPreference = $originalErrorActionPreference + $assertBoundParameters = @{ BoundParameterList = $PSBoundParameters MutuallyExclusiveList1 = @( diff --git a/source/Private/Invoke-SetupAction.ps1 b/source/Private/Invoke-SetupAction.ps1 index 949eabd88b..9ee4bc8eb2 100644 --- a/source/Private/Invoke-SetupAction.ps1 +++ b/source/Private/Invoke-SetupAction.ps1 @@ -1372,7 +1372,7 @@ function Invoke-SetupAction $Force ) - $previousErrorActionPreference = $ErrorActionPreference + $originalErrorActionPreference = $ErrorActionPreference $ErrorActionPreference = 'Stop' @@ -1415,7 +1415,7 @@ function Invoke-SetupAction Assert-SetupActionProperties -Property $PSBoundParameters -SetupAction $setupAction -ErrorAction 'Stop' - $ErrorActionPreference = $previousErrorActionPreference + $ErrorActionPreference = $originalErrorActionPreference $setupArgument = '/QUIET /ACTION={0}' -f $setupAction diff --git a/source/Public/Add-SqlDscTraceFlag.ps1 b/source/Public/Add-SqlDscTraceFlag.ps1 index 0a66534e4d..20bce6e634 100644 --- a/source/Public/Add-SqlDscTraceFlag.ps1 +++ b/source/Public/Add-SqlDscTraceFlag.ps1 @@ -106,8 +106,14 @@ function Add-SqlDscTraceFlag $getSqlDscTraceFlagParameters.Remove($_) } + $originalErrorActionPreference = $ErrorActionPreference + + $ErrorActionPreference = 'Stop' + $currentTraceFlags = Get-SqlDscTraceFlag @getSqlDscTraceFlagParameters -ErrorAction 'Stop' + $ErrorActionPreference = $originalErrorActionPreference + $desiredTraceFlags = [System.UInt32[]] $currentTraceFlags + @( $TraceFlag | ForEach-Object -Process { @@ -130,7 +136,13 @@ function Add-SqlDscTraceFlag $setSqlDscTraceFlagParameters.TraceFLag = $desiredTraceFlags + $originalErrorActionPreference = $ErrorActionPreference + + $ErrorActionPreference = 'Stop' + Set-SqlDscTraceFlag @setSqlDscTraceFlagParameters -ErrorAction 'Stop' + + $ErrorActionPreference = $originalErrorActionPreference } } } diff --git a/source/Public/Get-SqlDscStartupParameter.ps1 b/source/Public/Get-SqlDscStartupParameter.ps1 index 1f99897c73..a5d0b76e31 100644 --- a/source/Public/Get-SqlDscStartupParameter.ps1 +++ b/source/Public/Get-SqlDscStartupParameter.ps1 @@ -65,19 +65,19 @@ function Get-SqlDscStartupParameter $InstanceName = 'MSSQLSERVER' ) - $previousErrorActionPreference = $ErrorActionPreference + $originalErrorActionPreference = $ErrorActionPreference $ErrorActionPreference = 'Stop' Assert-ElevatedUser -ErrorAction 'Stop' + $ErrorActionPreference = $originalErrorActionPreference + if ($PSCmdlet.ParameterSetName -eq 'ByServiceObject') { $ServiceObject | Assert-ManagedServiceType -ServiceType 'DatabaseEngine' } - $ErrorActionPreference = $previousErrorActionPreference - if ($PSCmdlet.ParameterSetName -eq 'ByServerName') { $getSqlDscManagedComputerServiceParameters = @{ diff --git a/source/Public/Import-SqlDscPreferredModule.ps1 b/source/Public/Import-SqlDscPreferredModule.ps1 index 774ddcf895..20334ff398 100644 --- a/source/Public/Import-SqlDscPreferredModule.ps1 +++ b/source/Public/Import-SqlDscPreferredModule.ps1 @@ -72,6 +72,10 @@ function Import-SqlDscPreferredModule $availableModule = $null + $originalErrorActionPreference = $ErrorActionPreference + + $ErrorActionPreference = 'Stop' + try { $availableModule = Get-SqlDscPreferredModule @getSqlDscPreferredModuleParameters -ErrorAction 'Stop' @@ -87,6 +91,10 @@ function Import-SqlDscPreferredModule ) ) } + finally + { + $ErrorActionPreference = $originalErrorActionPreference + } if ($Force.IsPresent -and -not $Confirm) { @@ -133,12 +141,18 @@ function Import-SqlDscPreferredModule Push-Location + $originalErrorActionPreference = $ErrorActionPreference + + $ErrorActionPreference = 'Stop' + <# SQLPS has unapproved verbs, disable checking to ignore Warnings. Suppressing verbose so all cmdlet is not listed. #> $importedModule = Import-Module -ModuleInfo $availableModule -DisableNameChecking -Verbose:$false -Force:$Force -Global -PassThru -ErrorAction 'Stop' + $ErrorActionPreference = $originalErrorActionPreference + <# SQLPS returns two entries, one with module type 'Script' and another with module type 'Manifest'. Only return the object with module type 'Manifest'. diff --git a/source/Public/Remove-SqlDscTraceFlag.ps1 b/source/Public/Remove-SqlDscTraceFlag.ps1 index 091bda9af0..be30fa4aa7 100644 --- a/source/Public/Remove-SqlDscTraceFlag.ps1 +++ b/source/Public/Remove-SqlDscTraceFlag.ps1 @@ -106,8 +106,14 @@ function Remove-SqlDscTraceFlag $getSqlDscTraceFlagParameters.Remove($_) } + $originalErrorActionPreference = $ErrorActionPreference + + $ErrorActionPreference = 'Stop' + $currentTraceFlags = Get-SqlDscTraceFlag @getSqlDscTraceFlagParameters -ErrorAction 'Stop' + $ErrorActionPreference = $originalErrorActionPreference + if ($currentTraceFlags) { # Must always return an array. An empty array when removing the last value. @@ -133,7 +139,13 @@ function Remove-SqlDscTraceFlag $setSqlDscTraceFlagParameters.TraceFLag = $desiredTraceFlags + $originalErrorActionPreference = $ErrorActionPreference + + $ErrorActionPreference = 'Stop' + Set-SqlDscTraceFlag @setSqlDscTraceFlagParameters -ErrorAction 'Stop' + + $ErrorActionPreference = $originalErrorActionPreference } } else diff --git a/source/Public/Set-SqlDscStartupParameter.ps1 b/source/Public/Set-SqlDscStartupParameter.ps1 index e36e84ae81..986e6b8c37 100644 --- a/source/Public/Set-SqlDscStartupParameter.ps1 +++ b/source/Public/Set-SqlDscStartupParameter.ps1 @@ -91,18 +91,18 @@ function Set-SqlDscStartupParameter begin { - $previousErrorActionPreference = $ErrorActionPreference + $originalErrorActionPreference = $ErrorActionPreference $ErrorActionPreference = 'Stop' Assert-ElevatedUser -ErrorAction 'Stop' + $ErrorActionPreference = $originalErrorActionPreference + if ($Force.IsPresent -and -not $Confirm) { $ConfirmPreference = 'None' } - - $ErrorActionPreference = $previousErrorActionPreference } process @@ -120,7 +120,7 @@ function Set-SqlDscStartupParameter ServerName = $ServerName InstanceName = $InstanceName ServiceType = 'DatabaseEngine' - ErrorAction = 'Stop' + ErrorAction = 'SilentlyContinue' } $ServiceObject = Get-SqlDscManagedComputerService @getSqlDscManagedComputerServiceParameters