Skip to content

Commit 9d07630

Browse files
profiling backup
1 parent 87556a8 commit 9d07630

File tree

1 file changed

+102
-142
lines changed

1 file changed

+102
-142
lines changed

Modules/CIPPCore/Public/New-CIPPBackupTask.ps1

Lines changed: 102 additions & 142 deletions
Original file line numberDiff line numberDiff line change
@@ -5,198 +5,158 @@ function New-CIPPBackupTask {
55
$TenantFilter
66
)
77

8-
$FunctionStopwatch = [System.Diagnostics.Stopwatch]::StartNew()
9-
Write-Host "CIPPBACKUP: Starting backup task: $Task for tenant: $TenantFilter"
10-
118
$BackupData = switch ($Task) {
129
'CippCustomVariables' {
13-
$TaskStopwatch = [System.Diagnostics.Stopwatch]::StartNew()
14-
Write-Host "CIPPBACKUP: Backing up Custom Variables for $TenantFilter"
15-
$ReplaceTable = Get-CIPPTable -tablename 'CippReplacemap'
16-
17-
# Get tenant-specific variables
18-
$Tenant = Get-Tenants -TenantFilter $TenantFilter
19-
$CustomerId = $Tenant.customerId
20-
21-
$TenantVariables = Get-CIPPAzDataTableEntity @ReplaceTable -Filter "PartitionKey eq '$CustomerId'"
22-
23-
# If backing up AllTenants, also get global variables
24-
if ($TenantFilter -eq 'AllTenants') {
25-
$GlobalVariables = Get-CIPPAzDataTableEntity @ReplaceTable -Filter "PartitionKey eq 'AllTenants'"
26-
$AllVariables = @($TenantVariables) + @($GlobalVariables)
27-
$TaskStopwatch.Stop()
28-
Write-Host "CIPPBACKUP: CippCustomVariables backup completed in $($TaskStopwatch.Elapsed.TotalSeconds) seconds"
29-
$AllVariables
30-
} else {
31-
$TaskStopwatch.Stop()
32-
Write-Host "CIPPBACKUP: CippCustomVariables backup completed in $($TaskStopwatch.Elapsed.TotalSeconds) seconds"
33-
$TenantVariables
10+
Measure-CIPPTask -Name 'CIPP.BackupCompleted' -Section 'CustomVariables' -Execute {
11+
$ReplaceTable = Get-CIPPTable -tablename 'CippReplacemap'
12+
13+
# Get tenant-specific variables
14+
$Tenant = Get-Tenants -TenantFilter $TenantFilter
15+
$CustomerId = $Tenant.customerId
16+
17+
$TenantVariables = Get-CIPPAzDataTableEntity @ReplaceTable -Filter "PartitionKey eq '$CustomerId'"
18+
19+
# If backing up AllTenants, also get global variables
20+
if ($TenantFilter -eq 'AllTenants') {
21+
$GlobalVariables = Get-CIPPAzDataTableEntity @ReplaceTable -Filter "PartitionKey eq 'AllTenants'"
22+
$AllVariables = @($TenantVariables) + @($GlobalVariables)
23+
$AllVariables
24+
} else {
25+
$TenantVariables
26+
}
3427
}
3528
}
3629
'users' {
37-
$TaskStopwatch = [System.Diagnostics.Stopwatch]::StartNew()
38-
Write-Host "CIPPBACKUP: Backup users for $TenantFilter"
39-
$Users = New-GraphGetRequest -uri 'https://graph.microsoft.com/beta/users?$top=999' -tenantid $TenantFilter | Select-Object * -ExcludeProperty mail, provisionedPlans, onPrem*, *passwordProfile*, *serviceProvisioningErrors*, isLicenseReconciliationNeeded, isManagementRestricted, isResourceAccount, *date*, *external*, identities, deletedDateTime, isSipEnabled, assignedPlans, cloudRealtimeCommunicationInfo, deviceKeys, provisionedPlan, securityIdentifier
40-
#remove the property if the value is $null
41-
$users = $Users | ForEach-Object {
42-
$_.psobject.properties | Where-Object { $null -eq $_.Value } | ForEach-Object {
43-
$_.psobject.properties.Remove($_.Name)
30+
Measure-CIPPTask -Name 'CIPP.BackupCompleted' -Section 'Users' -Execute {
31+
$Users = New-GraphGetRequest -uri 'https://graph.microsoft.com/beta/users?$top=999' -tenantid $TenantFilter | Select-Object * -ExcludeProperty mail, provisionedPlans, onPrem*, *passwordProfile*, *serviceProvisioningErrors*, isLicenseReconciliationNeeded, isManagementRestricted, isResourceAccount, *date*, *external*, identities, deletedDateTime, isSipEnabled, assignedPlans, cloudRealtimeCommunicationInfo, deviceKeys, provisionedPlan, securityIdentifier
32+
#remove the property if the value is $null
33+
$users = $Users | ForEach-Object {
34+
$_.psobject.properties | Where-Object { $null -eq $_.Value } | ForEach-Object {
35+
$_.psobject.properties.Remove($_.Name)
36+
}
4437
}
38+
$Users
4539
}
46-
$TaskStopwatch.Stop()
47-
Write-Host "CIPPBACKUP: Users backup completed in $($TaskStopwatch.Elapsed.TotalSeconds) seconds"
48-
$Users
49-
5040
}
5141
'groups' {
52-
$TaskStopwatch = [System.Diagnostics.Stopwatch]::StartNew()
53-
Write-Host "CIPPBACKUP: Backup groups for $TenantFilter"
54-
$Groups = New-GraphGetRequest -uri 'https://graph.microsoft.com/beta/groups?$top=999' -tenantid $TenantFilter
55-
$TaskStopwatch.Stop()
56-
Write-Host "CIPPBACKUP: Groups backup completed in $($TaskStopwatch.Elapsed.TotalSeconds) seconds"
57-
$Groups
42+
Measure-CIPPTask -Name 'CIPP.BackupCompleted' -Section 'Groups' -Execute {
43+
New-GraphGetRequest -uri 'https://graph.microsoft.com/beta/groups?$top=999' -tenantid $TenantFilter
44+
}
5845
}
5946
'ca' {
60-
$TaskStopwatch = [System.Diagnostics.Stopwatch]::StartNew()
61-
Write-Host "CIPPBACKUP: Backup Conditional Access Policies for $TenantFilter"
62-
$Policies = New-GraphGetRequest -uri 'https://graph.microsoft.com/beta/conditionalAccess/policies?$top=999' -tenantid $TenantFilter -AsApp $true
63-
Write-Host 'CIPPBACKUP: Creating templates for found Conditional Access Policies'
64-
foreach ($policy in $policies) {
65-
try {
66-
New-CIPPCATemplate -TenantFilter $TenantFilter -JSON $policy
67-
} catch {
68-
"Failed to create a template of the Conditional Access Policy with ID: $($policy.id). Error: $($_.Exception.Message)"
47+
Measure-CIPPTask -Name 'CIPP.BackupCompleted' -Section 'ConditionalAccess' -Execute {
48+
$Policies = New-GraphGetRequest -uri 'https://graph.microsoft.com/beta/conditionalAccess/policies?$top=999' -tenantid $TenantFilter -AsApp $true
49+
foreach ($policy in $policies) {
50+
try {
51+
New-CIPPCATemplate -TenantFilter $TenantFilter -JSON $policy
52+
} catch {
53+
"Failed to create a template of the Conditional Access Policy with ID: $($policy.id). Error: $($_.Exception.Message)"
54+
}
6955
}
7056
}
71-
$TaskStopwatch.Stop()
72-
Write-Host "CIPPBACKUP: Conditional Access backup completed in $($TaskStopwatch.Elapsed.TotalSeconds) seconds"
7357
}
7458
'intuneconfig' {
75-
$TaskStopwatch = [System.Diagnostics.Stopwatch]::StartNew()
76-
Write-Host "CIPPBACKUP: Backup Intune Configuration Policies for $TenantFilter"
77-
$GraphURLS = @("https://graph.microsoft.com/beta/deviceManagement/deviceConfigurations?`$select=id,displayName,lastModifiedDateTime,roleScopeTagIds,microsoft.graph.unsupportedDeviceConfiguration/originalEntityTypeName&`$expand=assignments&top=1000"
78-
'https://graph.microsoft.com/beta/deviceManagement/windowsDriverUpdateProfiles'
79-
"https://graph.microsoft.com/beta/deviceManagement/groupPolicyConfigurations?`$expand=assignments&top=999"
80-
"https://graph.microsoft.com/beta/deviceAppManagement/mobileAppConfigurations?`$expand=assignments&`$filter=microsoft.graph.androidManagedStoreAppConfiguration/appSupportsOemConfig%20eq%20true"
81-
'https://graph.microsoft.com/beta/deviceManagement/configurationPolicies'
82-
'https://graph.microsoft.com/beta/deviceManagement/windowsFeatureUpdateProfiles'
83-
'https://graph.microsoft.com/beta/deviceManagement/windowsQualityUpdatePolicies'
84-
'https://graph.microsoft.com/beta/deviceManagement/windowsQualityUpdateProfiles'
85-
)
86-
87-
foreach ($url in $GraphURLS) {
88-
try {
89-
$Policies = New-GraphGetRequest -uri "$($url)" -tenantid $TenantFilter
90-
$URLName = (($url).split('?') | Select-Object -First 1) -replace 'https://graph.microsoft.com/beta/deviceManagement/', ''
91-
foreach ($Policy in $Policies) {
92-
try {
93-
New-CIPPIntuneTemplate -TenantFilter $TenantFilter -URLName $URLName -ID $Policy.ID
94-
} catch {
95-
$ErrorMessage = Get-NormalizedError -Message $_.Exception.Message
96-
"Failed to create a template of the Intune Configuration Policy with ID: $($Policy.id). Error: $ErrorMessage"
59+
Measure-CIPPTask -Name 'CIPP.BackupCompleted' -Section 'IntuneConfiguration' -Execute {
60+
$GraphURLS = @("https://graph.microsoft.com/beta/deviceManagement/deviceConfigurations?`$select=id,displayName,lastModifiedDateTime,roleScopeTagIds,microsoft.graph.unsupportedDeviceConfiguration/originalEntityTypeName&`$expand=assignments&top=1000"
61+
'https://graph.microsoft.com/beta/deviceManagement/windowsDriverUpdateProfiles'
62+
"https://graph.microsoft.com/beta/deviceManagement/groupPolicyConfigurations?`$expand=assignments&top=999"
63+
"https://graph.microsoft.com/beta/deviceAppManagement/mobileAppConfigurations?`$expand=assignments&`$filter=microsoft.graph.androidManagedStoreAppConfiguration/appSupportsOemConfig%20eq%20true"
64+
'https://graph.microsoft.com/beta/deviceManagement/configurationPolicies'
65+
'https://graph.microsoft.com/beta/deviceManagement/windowsFeatureUpdateProfiles'
66+
'https://graph.microsoft.com/beta/deviceManagement/windowsQualityUpdatePolicies'
67+
'https://graph.microsoft.com/beta/deviceManagement/windowsQualityUpdateProfiles'
68+
)
69+
70+
foreach ($url in $GraphURLS) {
71+
try {
72+
$Policies = New-GraphGetRequest -uri "$($url)" -tenantid $TenantFilter
73+
$URLName = (($url).split('?') | Select-Object -First 1) -replace 'https://graph.microsoft.com/beta/deviceManagement/', ''
74+
foreach ($Policy in $Policies) {
75+
try {
76+
New-CIPPIntuneTemplate -TenantFilter $TenantFilter -URLName $URLName -ID $Policy.ID
77+
} catch {
78+
$ErrorMessage = Get-NormalizedError -Message $_.Exception.Message
79+
"Failed to create a template of the Intune Configuration Policy with ID: $($Policy.id). Error: $ErrorMessage"
80+
}
9781
}
82+
} catch {
83+
Write-Host "Failed to backup $url"
9884
}
99-
} catch {
100-
Write-Host "CIPPBACKUP: Failed to backup $url"
10185
}
10286
}
103-
$TaskStopwatch.Stop()
104-
Write-Host "CIPPBACKUP: Intune Configuration backup completed in $($TaskStopwatch.Elapsed.TotalSeconds) seconds"
10587
}
10688
'intunecompliance' {
107-
$TaskStopwatch = [System.Diagnostics.Stopwatch]::StartNew()
108-
Write-Host "CIPPBACKUP: Backup Intune Configuration Policies for $TenantFilter"
109-
110-
New-GraphGetRequest -uri 'https://graph.microsoft.com/beta/deviceManagement/deviceCompliancePolicies?$top=999' -tenantid $TenantFilter | ForEach-Object {
111-
New-CIPPIntuneTemplate -TenantFilter $TenantFilter -URLName 'deviceCompliancePolicies' -ID $_.ID
89+
Measure-CIPPTask -Name 'CIPP.BackupCompleted' -Section 'IntuneCompliance' -Execute {
90+
New-GraphGetRequest -uri 'https://graph.microsoft.com/beta/deviceManagement/deviceCompliancePolicies?$top=999' -tenantid $TenantFilter | ForEach-Object {
91+
New-CIPPIntuneTemplate -TenantFilter $TenantFilter -URLName 'deviceCompliancePolicies' -ID $_.ID
92+
}
11293
}
113-
$TaskStopwatch.Stop()
114-
Write-Host "CIPPBACKUP: Intune Compliance backup completed in $($TaskStopwatch.Elapsed.TotalSeconds) seconds"
11594
}
11695

11796
'intuneprotection' {
118-
$TaskStopwatch = [System.Diagnostics.Stopwatch]::StartNew()
119-
Write-Host "CIPPBACKUP: Backup Intune Configuration Policies for $TenantFilter"
120-
121-
New-GraphGetRequest -uri 'https://graph.microsoft.com/beta/deviceAppManagement/managedAppPolicies?$top=999' -tenantid $TenantFilter | ForEach-Object {
122-
New-CIPPIntuneTemplate -TenantFilter $TenantFilter -URLName 'managedAppPolicies' -ID $_.ID
97+
Measure-CIPPTask -Name 'CIPP.BackupCompleted' -Section 'IntuneProtection' -Execute {
98+
New-GraphGetRequest -uri 'https://graph.microsoft.com/beta/deviceAppManagement/managedAppPolicies?$top=999' -tenantid $TenantFilter | ForEach-Object {
99+
New-CIPPIntuneTemplate -TenantFilter $TenantFilter -URLName 'managedAppPolicies' -ID $_.ID
100+
}
123101
}
124-
$TaskStopwatch.Stop()
125-
Write-Host "CIPPBACKUP: Intune Protection backup completed in $($TaskStopwatch.Elapsed.TotalSeconds) seconds"
126102
}
127103

128104
'antispam' {
129-
$TaskStopwatch = [System.Diagnostics.Stopwatch]::StartNew()
130-
Write-Host "CIPPBACKUP: Backup Anti-Spam Policies for $TenantFilter"
131-
132-
$Policies = New-ExoRequest -tenantid $Tenantfilter -cmdlet 'Get-HostedContentFilterPolicy' | Select-Object * -ExcludeProperty *odata*, *data.type*
133-
$Rules = New-ExoRequest -tenantid $Tenantfilter -cmdlet 'Get-HostedContentFilterRule' | Select-Object * -ExcludeProperty *odata*, *data.type*
105+
Measure-CIPPTask -Name 'CIPP.BackupCompleted' -Section 'AntiSpam' -Execute {
106+
$Policies = New-ExoRequest -tenantid $Tenantfilter -cmdlet 'Get-HostedContentFilterPolicy' | Select-Object * -ExcludeProperty *odata*, *data.type*
107+
$Rules = New-ExoRequest -tenantid $Tenantfilter -cmdlet 'Get-HostedContentFilterRule' | Select-Object * -ExcludeProperty *odata*, *data.type*
134108

135-
$Policies | ForEach-Object {
136-
$_.psobject.properties | Where-Object { $null -eq $_.Value } | ForEach-Object {
137-
$_.psobject.properties.Remove($_.Name)
109+
$Policies | ForEach-Object {
110+
$_.psobject.properties | Where-Object { $null -eq $_.Value } | ForEach-Object {
111+
$_.psobject.properties.Remove($_.Name)
112+
}
138113
}
139-
}
140114

141-
$Rules | ForEach-Object {
142-
$_.psobject.properties | Where-Object { $null -eq $_.Value } | ForEach-Object {
143-
$_.psobject.properties.Remove($_.Name)
115+
$Rules | ForEach-Object {
116+
$_.psobject.properties | Where-Object { $null -eq $_.Value } | ForEach-Object {
117+
$_.psobject.properties.Remove($_.Name)
118+
}
144119
}
145-
}
146120

147-
$JSON = @{ policies = $Policies; rules = $Rules } | ConvertTo-Json -Depth 10
148-
$TaskStopwatch.Stop()
149-
Write-Host "CIPPBACKUP: Anti-Spam backup completed in $($TaskStopwatch.Elapsed.TotalSeconds) seconds"
150-
$JSON
121+
@{ policies = $Policies; rules = $Rules } | ConvertTo-Json -Depth 10
122+
}
151123
}
152124

153125
'antiphishing' {
154-
$TaskStopwatch = [System.Diagnostics.Stopwatch]::StartNew()
155-
Write-Host "CIPPBACKUP: Backup Anti-Phishing Policies for $TenantFilter"
156-
157-
$Policies = New-ExoRequest -tenantid $Tenantfilter -cmdlet 'Get-AntiPhishPolicy' | Select-Object * -ExcludeProperty *odata*, *data.type*
158-
$Rules = New-ExoRequest -tenantid $Tenantfilter -cmdlet 'Get-AntiPhishRule' | Select-Object * -ExcludeProperty *odata*, *data.type*
126+
Measure-CIPPTask -Name 'CIPP.BackupCompleted' -Section 'AntiPhishing' -Execute {
127+
$Policies = New-ExoRequest -tenantid $Tenantfilter -cmdlet 'Get-AntiPhishPolicy' | Select-Object * -ExcludeProperty *odata*, *data.type*
128+
$Rules = New-ExoRequest -tenantid $Tenantfilter -cmdlet 'Get-AntiPhishRule' | Select-Object * -ExcludeProperty *odata*, *data.type*
159129

160-
$Policies | ForEach-Object {
161-
$_.psobject.properties | Where-Object { $null -eq $_.Value } | ForEach-Object {
162-
$_.psobject.properties.Remove($_.Name)
130+
$Policies | ForEach-Object {
131+
$_.psobject.properties | Where-Object { $null -eq $_.Value } | ForEach-Object {
132+
$_.psobject.properties.Remove($_.Name)
133+
}
163134
}
164-
}
165135

166-
$Rules | ForEach-Object {
167-
$_.psobject.properties | Where-Object { $null -eq $_.Value } | ForEach-Object {
168-
$_.psobject.properties.Remove($_.Name)
136+
$Rules | ForEach-Object {
137+
$_.psobject.properties | Where-Object { $null -eq $_.Value } | ForEach-Object {
138+
$_.psobject.properties.Remove($_.Name)
139+
}
169140
}
170-
}
171141

172-
$JSON = @{ policies = $Policies; rules = $Rules } | ConvertTo-Json -Depth 10
173-
$TaskStopwatch.Stop()
174-
Write-Host "CIPPBACKUP: Anti-Phishing backup completed in $($TaskStopwatch.Elapsed.TotalSeconds) seconds"
175-
$JSON
142+
@{ policies = $Policies; rules = $Rules } | ConvertTo-Json -Depth 10
143+
}
176144
}
177145

178146
'CippWebhookAlerts' {
179-
$TaskStopwatch = [System.Diagnostics.Stopwatch]::StartNew()
180-
Write-Host "CIPPBACKUP: Backup Webhook Alerts for $TenantFilter"
181-
$WebhookTable = Get-CIPPTable -TableName 'WebhookRules'
182-
$WebhookData = Get-CIPPAzDataTableEntity @WebhookTable | Where-Object { $TenantFilter -in ($_.Tenants | ConvertFrom-Json).value }
183-
$TaskStopwatch.Stop()
184-
Write-Host "CIPPBACKUP: Webhook Alerts backup completed in $($TaskStopwatch.Elapsed.TotalSeconds) seconds"
185-
$WebhookData
147+
Measure-CIPPTask -Name 'CIPP.BackupCompleted' -Section 'WebhookAlerts' -Execute {
148+
$WebhookTable = Get-CIPPTable -TableName 'WebhookRules'
149+
Get-CIPPAzDataTableEntity @WebhookTable | Where-Object { $TenantFilter -in ($_.Tenants | ConvertFrom-Json).value }
150+
}
186151
}
187152
'CippScriptedAlerts' {
188-
$TaskStopwatch = [System.Diagnostics.Stopwatch]::StartNew()
189-
Write-Host "CIPPBACKUP: Backup Scripted Alerts for $TenantFilter"
190-
$ScheduledTasks = Get-CIPPTable -TableName 'ScheduledTasks'
191-
$ScriptedAlerts = Get-CIPPAzDataTableEntity @ScheduledTasks | Where-Object { $_.hidden -eq $true -and $_.command -like 'Get-CippAlert*' -and $TenantFilter -in $_.Tenant }
192-
$TaskStopwatch.Stop()
193-
Write-Host "CIPPBACKUP: Scripted Alerts backup completed in $($TaskStopwatch.Elapsed.TotalSeconds) seconds"
194-
$ScriptedAlerts
153+
Measure-CIPPTask -Name 'CIPP.BackupCompleted' -Section 'ScriptedAlerts' -Execute {
154+
$ScheduledTasks = Get-CIPPTable -TableName 'ScheduledTasks'
155+
Get-CIPPAzDataTableEntity @ScheduledTasks | Where-Object { $_.hidden -eq $true -and $_.command -like 'Get-CippAlert*' -and $TenantFilter -in $_.Tenant }
156+
}
195157
}
196158
}
197159

198-
$FunctionStopwatch.Stop()
199-
Write-Host "CIPPBACKUP: Total backup task completed in $($FunctionStopwatch.Elapsed.TotalSeconds) seconds"
200160
return $BackupData
201161
}
202162

0 commit comments

Comments
 (0)