@@ -22,7 +22,7 @@ function Remediation-SubscriptionScope-Crud
22
22
$remediationName = " PSTestRemediation"
23
23
24
24
# Create a new remediation
25
- $remediation = New -AzureRmPolicyRemediation - PolicyAssignmentId $assignmentId - Name $remediationName - LocationFilter " westus2" , " west central us"
25
+ $remediation = Start -AzureRmPolicyRemediation - PolicyAssignmentId $assignmentId - Name $remediationName - LocationFilter " westus2" , " west central us"
26
26
Validate- Remediation $remediation
27
27
Assert-AreEqual $assignmentId $remediation.PolicyAssignmentId
28
28
Assert-Null $remediation.PolicyDefinitionReferenceId
@@ -31,40 +31,40 @@ function Remediation-SubscriptionScope-Crud
31
31
Assert-AreEqualArray $remediation.Filters.Locations @ (" westus2" , " westcentralus" )
32
32
Assert-AreEqual 3 $remediation.DeploymentSummary.TotalDeployments
33
33
34
- # Cancel the remediation
35
- $remediation | Stop-AzureRmPolicyRemediation
34
+ # Cancel the remediation as a job so that we wait for cancellation to complete
35
+ $job = ($remediation | Stop-AzureRmPolicyRemediation - AsJob)
36
+ $job | Wait-Job
36
37
37
38
# Get the remediation that was just cancelled
38
39
$remediation = Get-AzureRmPolicyRemediation - Name $remediationName
39
40
Validate- Remediation $remediation
40
41
Assert-AreEqual $remediationName $remediation.Name
41
42
Assert-AreEqual $assignmentId $remediation.PolicyAssignmentId
42
- Assert-True { $remediation.ProvisioningState -like " Cancel* " }
43
+ Assert-AreEqual " Canceled " $remediation.ProvisioningState
43
44
Assert-AreEqual 2 $remediation.Filters.Locations.Count
44
45
Assert-AreEqualArray $remediation.Filters.Locations @ (" westus2" , " westcentralus" )
45
46
Assert-AreEqual 3 $remediation.DeploymentSummary.TotalDeployments
46
47
Assert-AreEqual 0 $remediation.DeploymentSummary.FailedDeployments
47
48
48
- # Get the deployments for the remediation via piping
49
- $deployments = $remediation | Get-AzureRmPolicyRemediationDeployment
50
- Assert-AreEqual 3 $deployments.Count
51
- $acceptedStates = " Canceled" , " NotStarted"
52
- $deployments | ForEach-Object {
49
+ # Get the deployments for the remediation
50
+ $remediation = Get-AzureRmPolicyRemediation - Name $remediationName - IncludeDetail
51
+ Assert-AreEqual 3 $remediation.Deployments.Count
52
+ $remediation.Deployments | ForEach-Object {
53
53
Validate- RemediationDeployment $_
54
- Assert-True { $acceptedStates -contains $ _.Status }
54
+ Assert-AreEqual " Canceled " $ _.Status
55
55
}
56
56
57
- # Get the deployments for the remediation without piping (+ top filter)
58
- $deployments = Get-AzureRmPolicyRemediationDeployment - Name $remediationName - Top 2
59
- Assert-AreEqual 2 $deployments .Count
60
- $deployments | ForEach-Object {
57
+ # Get the deployments for the remediation with a Top filter
58
+ $remediation = Get-AzureRmPolicyRemediation - Name $remediationName - IncludeDetail - Top 2
59
+ Assert-AreEqual 2 $remediation .Deployments .Count
60
+ $remediation .Deployments | ForEach-Object {
61
61
Validate- RemediationDeployment $_
62
- Assert-True { $acceptedStates -contains $ _.Status }
62
+ Assert-AreEqual " Canceled " $ _.Status
63
63
}
64
64
65
65
# Get all remediations in the subscription
66
66
$remediations = Get-AzureRmPolicyRemediation
67
- Assert-AreEqual 71 $remediations.Count
67
+ Assert-AreEqual 72 $remediations.Count
68
68
Validate- Remediation $remediations [10 ]
69
69
70
70
# Get a limited number of remediations
@@ -81,8 +81,8 @@ function Remediation-SubscriptionScope-Crud
81
81
}
82
82
83
83
# Delete the remediation that was created initially
84
- $result = { $remediation | Remove-AzureRmPolicyRemediation - PassThru }
85
- Assert-True $result
84
+ $result = ( $remediation | Remove-AzureRmPolicyRemediation - PassThru)
85
+ Assert-AreEqual $true $result
86
86
}
87
87
88
88
<#
@@ -96,7 +96,7 @@ function Remediation-ResourceGroupScope-Crud
96
96
$resourceGroupName = " elpere"
97
97
98
98
# Create a new remediation
99
- $remediation = New -AzureRmPolicyRemediation - ResourceGroupName $resourceGroupName - PolicyAssignmentId $assignmentId - Name $remediationName
99
+ $remediation = Start -AzureRmPolicyRemediation - ResourceGroupName $resourceGroupName - PolicyAssignmentId $assignmentId - Name $remediationName
100
100
Validate- Remediation $remediation
101
101
Assert-AreEqual $assignmentId $remediation.PolicyAssignmentId
102
102
Assert-Null $remediation.PolicyDefinitionReferenceId
@@ -105,33 +105,32 @@ function Remediation-ResourceGroupScope-Crud
105
105
Assert-AreEqual 5 $remediation.DeploymentSummary.TotalDeployments
106
106
107
107
# Cancel the remediation
108
- Stop-AzureRmPolicyRemediation - ResourceId $remediation.Id
108
+ Stop-AzureRmPolicyRemediation - ResourceId $remediation.Id
109
109
110
110
# Get the remediation that was just cancelled
111
111
$remediation = Get-AzureRmPolicyRemediation - ResourceGroupName $resourceGroupName - Name $remediationName
112
112
Validate- Remediation $remediation
113
113
Assert-AreEqual $remediationName $remediation.Name
114
114
Assert-AreEqual $assignmentId $remediation.PolicyAssignmentId
115
- Assert-True { $remediation.ProvisioningState -like " Cancel* " }
115
+ Assert-AreEqual " Canceled " $remediation.ProvisioningState
116
116
Assert-Null $remediation.Filters
117
117
Assert-AreEqual 5 $remediation.DeploymentSummary.TotalDeployments
118
118
Assert-AreEqual 0 $remediation.DeploymentSummary.FailedDeployments
119
119
120
- # Get the deployments for the remediation via piping
121
- $deployments = $remediation | Get-AzureRmPolicyRemediationDeployment
122
- Assert-AreEqual 5 $deployments.Count
123
- $acceptedStates = " Canceled" , " NotStarted"
124
- $deployments | ForEach-Object {
120
+ # Get the deployments for the remediation
121
+ $remediation = Get-AzureRmPolicyRemediation - ResourceGroupName $resourceGroupName - Name $remediationName - IncludeDetail
122
+ Assert-AreEqual 5 $remediation.Deployments.Count
123
+ $remediation.Deployments | ForEach-Object {
125
124
Validate- RemediationDeployment $_
126
- Assert-True { $acceptedStates -contains $ _.Status }
125
+ Assert-AreEqual " Canceled " $ _.Status
127
126
}
128
127
129
- # Get the deployments for the remediation without piping (+ top filter)
130
- $deployments = Get-AzureRmPolicyRemediationDeployment - ResourceGroupName $resourceGroupName - Name $remediationName - Top 2
131
- Assert-AreEqual 2 $deployments .Count
132
- $deployments | ForEach-Object {
128
+ # Get the deployments for the remediation (+ top filter)
129
+ $remediation = Get-AzureRmPolicyRemediation - ResourceGroupName $resourceGroupName - Name $remediationName - IncludeDetail - Top 2
130
+ Assert-AreEqual 2 $remediation .Deployments .Count
131
+ $remediation .Deployments | ForEach-Object {
133
132
Validate- RemediationDeployment $_
134
- Assert-True { $acceptedStates -contains $ _.Status }
133
+ Assert-AreEqual " Canceled " $ _.Status
135
134
}
136
135
137
136
# Get all remediations in the resource group
@@ -153,8 +152,8 @@ function Remediation-ResourceGroupScope-Crud
153
152
}
154
153
155
154
# Delete the remediation that was created initially
156
- $result = { Remove-AzureRmPolicyRemediation - ResourceGroupName $resourceGroupName - Name $remediationName - PassThru }
157
- Assert-True $result
155
+ $result = ( Remove-AzureRmPolicyRemediation - ResourceGroupName $resourceGroupName - Name $remediationName - PassThru)
156
+ Assert-AreEqual $true $result
158
157
}
159
158
160
159
<#
@@ -168,42 +167,42 @@ function Remediation-ResourceScope-Crud
168
167
$scope = " /subscriptions/d0610b27-9663-4c05-89f8-5b4be01e86a5/resourceGroups/elpere/providers/Microsoft.KeyVault/vaults/elpereKv"
169
168
170
169
# Create a new remediation
171
- $remediation = New -AzureRmPolicyRemediation - Scope $scope - PolicyAssignmentId $assignmentId - Name $remediationName
170
+ $remediation = Start -AzureRmPolicyRemediation - Scope $scope - PolicyAssignmentId $assignmentId - Name $remediationName
172
171
Validate- Remediation $remediation
173
172
Assert-AreEqual $assignmentId $remediation.PolicyAssignmentId
174
173
Assert-Null $remediation.PolicyDefinitionReferenceId
175
174
Assert-AreEqual " Accepted" $remediation.ProvisioningState
176
175
Assert-Null $remediation.Filters
177
176
Assert-AreEqual 1 $remediation.DeploymentSummary.TotalDeployments
178
177
179
- # Cancel the remediation
180
- Stop-AzureRmPolicyRemediation - Scope $scope - Name $remediationName
178
+ # Cancel the remediation as a job so that we wait for cancellation to complete
179
+ $job = Stop-AzureRmPolicyRemediation - Scope $scope - Name $remediationName - AsJob
180
+ $job | Wait-Job
181
181
182
182
# Get the remediation that was just cancelled
183
183
$remediation = Get-AzureRmPolicyRemediation - Scope $scope - Name $remediationName
184
184
Validate- Remediation $remediation
185
185
Assert-AreEqual $remediationName $remediation.Name
186
186
Assert-AreEqual $assignmentId $remediation.PolicyAssignmentId
187
- Assert-True { $remediation.ProvisioningState -like " Cancel* " }
187
+ Assert-AreEqual " Canceled " $remediation.ProvisioningState
188
188
Assert-Null $remediation.Filters
189
189
Assert-AreEqual 1 $remediation.DeploymentSummary.TotalDeployments
190
190
Assert-AreEqual 0 $remediation.DeploymentSummary.FailedDeployments
191
191
192
- # Get the deployments for the remediation via piping
193
- $deployments = $remediation | Get-AzureRmPolicyRemediationDeployment
194
- Assert-AreEqual 1 $deployments.Count
195
- $acceptedStates = " Canceled" , " NotStarted"
196
- $deployments | ForEach-Object {
192
+ # Get the deployments for the remediation
193
+ $remediation = Get-AzureRmPolicyRemediation - Scope $scope - Name $remediationName - IncludeDetail
194
+ Assert-AreEqual 1 $remediation.Deployments.Count
195
+ $remediation.Deployments | ForEach-Object {
197
196
Validate- RemediationDeployment $_
198
- Assert-True { $acceptedStates -contains $ _.Status }
197
+ Assert-AreEqual " Canceled " $ _.Status
199
198
}
200
199
201
- # Get the deployments for the remediation without piping (+ top filter)
202
- $deployments = Get-AzureRmPolicyRemediationDeployment - Scope $scope - Name $remediationName - Top 2
203
- Assert-AreEqual 1 $deployments .Count
204
- $deployments | ForEach-Object {
200
+ # Get the deployments for the remediation (+ top filter)
201
+ $remediation = Get-AzureRmPolicyRemediation - Scope $scope - Name $remediationName - IncludeDetail - Top 2
202
+ Assert-AreEqual 1 $remediation .Deployments .Count
203
+ $remediation .Deployments | ForEach-Object {
205
204
Validate- RemediationDeployment $_
206
- Assert-True { $acceptedStates -contains $ _.Status }
205
+ Assert-AreEqual " Canceled " $ _.Status
207
206
}
208
207
209
208
# Get all remediations underneath the resource
@@ -220,8 +219,8 @@ function Remediation-ResourceScope-Crud
220
219
}
221
220
222
221
# Delete the remediation that was created initially
223
- $result = { Remove-AzureRmPolicyRemediation - Scope $scope - Name $remediationName - PassThru }
224
- Assert-True $result
222
+ $result = ( Remove-AzureRmPolicyRemediation - Scope $scope - Name $remediationName - PassThru)
223
+ Assert-AreEqual $true $result
225
224
}
226
225
227
226
<#
@@ -235,7 +234,7 @@ function Remediation-ManagementGroupScope-Crud
235
234
$managementGroupId = " PolicyUIMG"
236
235
237
236
# Create a new remediation
238
- $remediation = New -AzureRmPolicyRemediation - ManagementGroupName $managementGroupId - PolicyAssignmentId $assignmentId - Name $remediationName
237
+ $remediation = Start -AzureRmPolicyRemediation - ManagementGroupName $managementGroupId - PolicyAssignmentId $assignmentId - Name $remediationName
239
238
Validate- Remediation $remediation
240
239
Assert-AreEqual $assignmentId $remediation.PolicyAssignmentId
241
240
Assert-Null $remediation.PolicyDefinitionReferenceId
@@ -251,26 +250,25 @@ function Remediation-ManagementGroupScope-Crud
251
250
Validate- Remediation $remediation
252
251
Assert-AreEqual $remediationName $remediation.Name
253
252
Assert-AreEqual $assignmentId $remediation.PolicyAssignmentId
254
- Assert-True { $remediation.ProvisioningState -like " Cancel* " }
253
+ Assert-AreEqual " Canceled " $remediation.ProvisioningState
255
254
Assert-Null $remediation.Filters
256
255
Assert-AreEqual 1 $remediation.DeploymentSummary.TotalDeployments
257
256
Assert-AreEqual 0 $remediation.DeploymentSummary.FailedDeployments
258
257
259
- # Get the deployments for the remediation via piping
260
- $deployments = $remediation | Get-AzureRmPolicyRemediationDeployment
261
- Assert-AreEqual 1 $deployments.Count
262
- $acceptedStates = " Canceled" , " NotStarted"
263
- $deployments | ForEach-Object {
258
+ # Get the deployments for the remediation
259
+ $remediation = Get-AzureRmPolicyRemediation - ManagementGroupName $managementGroupId - Name $remediationName - IncludeDetail
260
+ Assert-AreEqual 1 $remediation.Deployments.Count
261
+ $remediation.Deployments | ForEach-Object {
264
262
Validate- RemediationDeployment $_
265
- Assert-True { $acceptedStates -contains $ _.Status }
263
+ Assert-AreEqual " Canceled " $ _.Status
266
264
}
267
265
268
- # Get the deployments for the remediation without piping (+ top filter)
269
- $deployments = Get-AzureRmPolicyRemediationDeployment - ManagementGroupName $managementGroupId - Name $remediationName - Top 2
270
- Assert-AreEqual 1 $deployments .Count
271
- $deployments | ForEach-Object {
266
+ # Get the deployments for the remediation (+ top filter)
267
+ $remediation = Get-AzureRmPolicyRemediation - ManagementGroupName $managementGroupId - Name $remediationName - IncludeDetail - Top 2
268
+ Assert-AreEqual 1 $remediation .Deployments .Count
269
+ $remediation .Deployments | ForEach-Object {
272
270
Validate- RemediationDeployment $_
273
- Assert-True { $acceptedStates -contains $ _.Status }
271
+ Assert-AreEqual " Canceled " $ _.Status
274
272
}
275
273
276
274
# Get all remediations in the management group
@@ -292,6 +290,41 @@ function Remediation-ManagementGroupScope-Crud
292
290
}
293
291
294
292
# Delete the remediation that was created initially
295
- $result = { Remove-AzureRmPolicyRemediation - ResourceId $remediation.Id - PassThru }
296
- Assert-True $result
293
+ $result = (Remove-AzureRmPolicyRemediation - ResourceId $remediation.Id - PassThru)
294
+ Assert-AreEqual $true $result
295
+ }
296
+
297
+ <#
298
+ . SYNOPSIS
299
+ Perform remediation CRUD operations using background jobs
300
+ #>
301
+ function Remediation-BackgroundJobs {
302
+ $assignmentId = Get-TestRemediationSubscriptionPolicyAssignmentId
303
+ $remediationName = " PSTestRemediation"
304
+
305
+ # Create a new remediation as a job which will wait for it to complete
306
+ $job = Start-AzureRmPolicyRemediation - PolicyAssignmentId $assignmentId - Name $remediationName - LocationFilter " eastus2" - AsJob
307
+ $job | Wait-Job
308
+ Assert-AreEqual " Completed" $job.State
309
+ $remediation = $job | Receive-Job
310
+
311
+ Validate- Remediation $remediation
312
+ Assert-AreEqual $assignmentId $remediation.PolicyAssignmentId
313
+ Assert-Null $remediation.PolicyDefinitionReferenceId
314
+ Assert-AreEqual " Succeeded" $remediation.ProvisioningState
315
+ Assert-AreEqual 1 $remediation.Filters.Locations.Count
316
+ Assert-AreEqualArray $remediation.Filters.Locations @ (" eastus2" )
317
+ Assert-AreEqual 1 $remediation.DeploymentSummary.TotalDeployments
318
+ Assert-AreEqual 1 $remediation.DeploymentSummary.SuccessfulDeployments
319
+ Assert-AreEqual 0 $remediation.DeploymentSummary.FailedDeployments
320
+
321
+ # Create the remediation again so we can remove/stop it in a job
322
+ $remediation = Start-AzureRmPolicyRemediation - PolicyAssignmentId $assignmentId - Name $remediationName - LocationFilter " eastus2"
323
+
324
+ # Remove and stop the remediation in one action as a background job
325
+ $job = ($remediation | Remove-AzureRmPolicyRemediation - AllowStop - PassThru - AsJob)
326
+ $job | Wait-Job
327
+ Assert-AreEqual " Completed" $job.State
328
+ $result = $job | Receive-Job
329
+ Assert-AreEqual $true $result
297
330
}
0 commit comments