Skip to content

Commit 5356e0c

Browse files
authored
Refactor error handling, proper termination using ErrorActionPreference (#2158)
1 parent f908d98 commit 5356e0c

9 files changed

+62
-9
lines changed

CHANGELOG.md

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,9 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
1212
- Fixed Azure DevOps pipeline conditions that were preventing DSC resource
1313
integration tests from running when they should by removing incorrect quotes
1414
around boolean values.
15+
- Refactored error handling by removing global `$ErrorActionPreference = 'Stop'`
16+
from 64 PowerShell files and implementing targeted error control for specific
17+
command calls that use `-ErrorAction 'Stop'`.
1518
- `SqlAgentAlert`
1619
- Minor fix in `source/Classes/020.SqlAgentAlert.ps1` to correct `ExcludeDscProperties`
1720
formatting (added missing delimiter).

source/Private/Get-FileVersionInformation.ps1

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -34,8 +34,14 @@ function Get-FileVersionInformation
3434

3535
process
3636
{
37+
$originalErrorActionPreference = $ErrorActionPreference
38+
39+
$ErrorActionPreference = 'Stop'
40+
3741
$file = Get-Item -Path $FilePath -ErrorAction 'Stop'
3842

43+
$ErrorActionPreference = $originalErrorActionPreference
44+
3945
if ($file.PSIsContainer)
4046
{
4147
$PSCmdlet.ThrowTerminatingError(

source/Private/Invoke-ReportServerSetupAction.ps1

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -205,8 +205,14 @@ function Invoke-ReportServerSetupAction
205205
$ConfirmPreference = 'None'
206206
}
207207

208+
$originalErrorActionPreference = $ErrorActionPreference
209+
210+
$ErrorActionPreference = 'Stop'
211+
208212
Assert-ElevatedUser -ErrorAction 'Stop'
209213

214+
$ErrorActionPreference = $originalErrorActionPreference
215+
210216
$assertBoundParameters = @{
211217
BoundParameterList = $PSBoundParameters
212218
MutuallyExclusiveList1 = @(

source/Private/Invoke-SetupAction.ps1

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1372,7 +1372,7 @@ function Invoke-SetupAction
13721372
$Force
13731373
)
13741374

1375-
$previousErrorActionPreference = $ErrorActionPreference
1375+
$originalErrorActionPreference = $ErrorActionPreference
13761376

13771377
$ErrorActionPreference = 'Stop'
13781378

@@ -1415,7 +1415,7 @@ function Invoke-SetupAction
14151415

14161416
Assert-SetupActionProperties -Property $PSBoundParameters -SetupAction $setupAction -ErrorAction 'Stop'
14171417

1418-
$ErrorActionPreference = $previousErrorActionPreference
1418+
$ErrorActionPreference = $originalErrorActionPreference
14191419

14201420
$setupArgument = '/QUIET /ACTION={0}' -f $setupAction
14211421

source/Public/Add-SqlDscTraceFlag.ps1

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -106,8 +106,14 @@ function Add-SqlDscTraceFlag
106106
$getSqlDscTraceFlagParameters.Remove($_)
107107
}
108108

109+
$originalErrorActionPreference = $ErrorActionPreference
110+
111+
$ErrorActionPreference = 'Stop'
112+
109113
$currentTraceFlags = Get-SqlDscTraceFlag @getSqlDscTraceFlagParameters -ErrorAction 'Stop'
110114

115+
$ErrorActionPreference = $originalErrorActionPreference
116+
111117
$desiredTraceFlags = [System.UInt32[]] $currentTraceFlags + @(
112118
$TraceFlag |
113119
ForEach-Object -Process {
@@ -130,7 +136,13 @@ function Add-SqlDscTraceFlag
130136

131137
$setSqlDscTraceFlagParameters.TraceFLag = $desiredTraceFlags
132138

139+
$originalErrorActionPreference = $ErrorActionPreference
140+
141+
$ErrorActionPreference = 'Stop'
142+
133143
Set-SqlDscTraceFlag @setSqlDscTraceFlagParameters -ErrorAction 'Stop'
144+
145+
$ErrorActionPreference = $originalErrorActionPreference
134146
}
135147
}
136148
}

source/Public/Get-SqlDscStartupParameter.ps1

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -65,19 +65,19 @@ function Get-SqlDscStartupParameter
6565
$InstanceName = 'MSSQLSERVER'
6666
)
6767

68-
$previousErrorActionPreference = $ErrorActionPreference
68+
$originalErrorActionPreference = $ErrorActionPreference
6969

7070
$ErrorActionPreference = 'Stop'
7171

7272
Assert-ElevatedUser -ErrorAction 'Stop'
7373

74+
$ErrorActionPreference = $originalErrorActionPreference
75+
7476
if ($PSCmdlet.ParameterSetName -eq 'ByServiceObject')
7577
{
7678
$ServiceObject | Assert-ManagedServiceType -ServiceType 'DatabaseEngine'
7779
}
7880

79-
$ErrorActionPreference = $previousErrorActionPreference
80-
8181
if ($PSCmdlet.ParameterSetName -eq 'ByServerName')
8282
{
8383
$getSqlDscManagedComputerServiceParameters = @{

source/Public/Import-SqlDscPreferredModule.ps1

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -72,6 +72,10 @@ function Import-SqlDscPreferredModule
7272

7373
$availableModule = $null
7474

75+
$originalErrorActionPreference = $ErrorActionPreference
76+
77+
$ErrorActionPreference = 'Stop'
78+
7579
try
7680
{
7781
$availableModule = Get-SqlDscPreferredModule @getSqlDscPreferredModuleParameters -ErrorAction 'Stop'
@@ -87,6 +91,10 @@ function Import-SqlDscPreferredModule
8791
)
8892
)
8993
}
94+
finally
95+
{
96+
$ErrorActionPreference = $originalErrorActionPreference
97+
}
9098

9199
if ($Force.IsPresent -and -not $Confirm)
92100
{
@@ -133,12 +141,18 @@ function Import-SqlDscPreferredModule
133141

134142
Push-Location
135143

144+
$originalErrorActionPreference = $ErrorActionPreference
145+
146+
$ErrorActionPreference = 'Stop'
147+
136148
<#
137149
SQLPS has unapproved verbs, disable checking to ignore Warnings.
138150
Suppressing verbose so all cmdlet is not listed.
139151
#>
140152
$importedModule = Import-Module -ModuleInfo $availableModule -DisableNameChecking -Verbose:$false -Force:$Force -Global -PassThru -ErrorAction 'Stop'
141153

154+
$ErrorActionPreference = $originalErrorActionPreference
155+
142156
<#
143157
SQLPS returns two entries, one with module type 'Script' and another with module type 'Manifest'.
144158
Only return the object with module type 'Manifest'.

source/Public/Remove-SqlDscTraceFlag.ps1

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -106,8 +106,14 @@ function Remove-SqlDscTraceFlag
106106
$getSqlDscTraceFlagParameters.Remove($_)
107107
}
108108

109+
$originalErrorActionPreference = $ErrorActionPreference
110+
111+
$ErrorActionPreference = 'Stop'
112+
109113
$currentTraceFlags = Get-SqlDscTraceFlag @getSqlDscTraceFlagParameters -ErrorAction 'Stop'
110114

115+
$ErrorActionPreference = $originalErrorActionPreference
116+
111117
if ($currentTraceFlags)
112118
{
113119
# Must always return an array. An empty array when removing the last value.
@@ -133,7 +139,13 @@ function Remove-SqlDscTraceFlag
133139

134140
$setSqlDscTraceFlagParameters.TraceFLag = $desiredTraceFlags
135141

142+
$originalErrorActionPreference = $ErrorActionPreference
143+
144+
$ErrorActionPreference = 'Stop'
145+
136146
Set-SqlDscTraceFlag @setSqlDscTraceFlagParameters -ErrorAction 'Stop'
147+
148+
$ErrorActionPreference = $originalErrorActionPreference
137149
}
138150
}
139151
else

source/Public/Set-SqlDscStartupParameter.ps1

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -91,18 +91,18 @@ function Set-SqlDscStartupParameter
9191

9292
begin
9393
{
94-
$previousErrorActionPreference = $ErrorActionPreference
94+
$originalErrorActionPreference = $ErrorActionPreference
9595

9696
$ErrorActionPreference = 'Stop'
9797

9898
Assert-ElevatedUser -ErrorAction 'Stop'
9999

100+
$ErrorActionPreference = $originalErrorActionPreference
101+
100102
if ($Force.IsPresent -and -not $Confirm)
101103
{
102104
$ConfirmPreference = 'None'
103105
}
104-
105-
$ErrorActionPreference = $previousErrorActionPreference
106106
}
107107

108108
process
@@ -120,7 +120,7 @@ function Set-SqlDscStartupParameter
120120
ServerName = $ServerName
121121
InstanceName = $InstanceName
122122
ServiceType = 'DatabaseEngine'
123-
ErrorAction = 'Stop'
123+
ErrorAction = 'SilentlyContinue'
124124
}
125125

126126
$ServiceObject = Get-SqlDscManagedComputerService @getSqlDscManagedComputerServiceParameters

0 commit comments

Comments
 (0)