@@ -5,9 +5,13 @@ 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+
811 $BackupData = switch ($Task ) {
912 ' CippCustomVariables' {
10- Write-Host " Backing up Custom Variables for $TenantFilter "
13+ $TaskStopwatch = [System.Diagnostics.Stopwatch ]::StartNew()
14+ Write-Host " CIPPBACKUP: Backing up Custom Variables for $TenantFilter "
1115 $ReplaceTable = Get-CIPPTable - tablename ' CippReplacemap'
1216
1317 # Get tenant-specific variables
@@ -20,40 +24,56 @@ function New-CIPPBackupTask {
2024 if ($TenantFilter -eq ' AllTenants' ) {
2125 $GlobalVariables = Get-CIPPAzDataTableEntity @ReplaceTable - Filter " PartitionKey eq 'AllTenants'"
2226 $AllVariables = @ ($TenantVariables ) + @ ($GlobalVariables )
27+ $TaskStopwatch.Stop ()
28+ Write-Host " CIPPBACKUP: CippCustomVariables backup completed in $ ( $TaskStopwatch.Elapsed.TotalSeconds ) seconds"
2329 $AllVariables
2430 } else {
31+ $TaskStopwatch.Stop ()
32+ Write-Host " CIPPBACKUP: CippCustomVariables backup completed in $ ( $TaskStopwatch.Elapsed.TotalSeconds ) seconds"
2533 $TenantVariables
2634 }
2735 }
2836 ' users' {
29- Write-Host " Backup users for $TenantFilter "
37+ $TaskStopwatch = [System.Diagnostics.Stopwatch ]::StartNew()
38+ Write-Host " CIPPBACKUP: Backup users for $TenantFilter "
3039 $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
3140 # remove the property if the value is $null
32- $Users | ForEach-Object {
41+ $users = $ Users | ForEach-Object {
3342 $_.psobject.properties | Where-Object { $null -eq $_.Value } | ForEach-Object {
3443 $_.psobject.properties.Remove ($_.Name )
3544 }
3645 }
46+ $TaskStopwatch.Stop ()
47+ Write-Host " CIPPBACKUP: Users backup completed in $ ( $TaskStopwatch.Elapsed.TotalSeconds ) seconds"
3748 $Users
49+
3850 }
3951 ' groups' {
40- Write-Host " Backup groups for $TenantFilter "
41- New-GraphGetRequest - uri ' https://graph.microsoft.com/beta/groups?$top=999' - tenantid $TenantFilter
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
4258 }
4359 ' ca' {
44- Write-Host " Backup Conditional Access Policies for $TenantFilter "
60+ $TaskStopwatch = [System.Diagnostics.Stopwatch ]::StartNew()
61+ Write-Host " CIPPBACKUP: Backup Conditional Access Policies for $TenantFilter "
4562 $Policies = New-GraphGetRequest - uri ' https://graph.microsoft.com/beta/conditionalAccess/policies?$top=999' - tenantid $TenantFilter - AsApp $true
46- Write-Host ' Creating templates for found Conditional Access Policies'
63+ Write-Host ' CIPPBACKUP: Creating templates for found Conditional Access Policies'
4764 foreach ($policy in $policies ) {
4865 try {
4966 New-CIPPCATemplate - TenantFilter $TenantFilter - JSON $policy
5067 } catch {
5168 " Failed to create a template of the Conditional Access Policy with ID: $ ( $policy.id ) . Error: $ ( $_.Exception.Message ) "
5269 }
5370 }
71+ $TaskStopwatch.Stop ()
72+ Write-Host " CIPPBACKUP: Conditional Access backup completed in $ ( $TaskStopwatch.Elapsed.TotalSeconds ) seconds"
5473 }
5574 ' intuneconfig' {
56- Write-Host " Backup Intune Configuration Policies for $TenantFilter "
75+ $TaskStopwatch = [System.Diagnostics.Stopwatch ]::StartNew()
76+ Write-Host " CIPPBACKUP: Backup Intune Configuration Policies for $TenantFilter "
5777 $GraphURLS = @ (" https://graph.microsoft.com/beta/deviceManagement/deviceConfigurations?`$ select=id,displayName,lastModifiedDateTime,roleScopeTagIds,microsoft.graph.unsupportedDeviceConfiguration/originalEntityTypeName&`$ expand=assignments&top=1000"
5878 ' https://graph.microsoft.com/beta/deviceManagement/windowsDriverUpdateProfiles'
5979 " https://graph.microsoft.com/beta/deviceManagement/groupPolicyConfigurations?`$ expand=assignments&top=999"
@@ -77,28 +97,37 @@ function New-CIPPBackupTask {
7797 }
7898 }
7999 } catch {
80- Write-Host " Failed to backup $url "
100+ Write-Host " CIPPBACKUP: Failed to backup $url "
81101 }
82102 }
103+ $TaskStopwatch.Stop ()
104+ Write-Host " CIPPBACKUP: Intune Configuration backup completed in $ ( $TaskStopwatch.Elapsed.TotalSeconds ) seconds"
83105 }
84106 ' intunecompliance' {
85- Write-Host " Backup Intune Configuration Policies for $TenantFilter "
107+ $TaskStopwatch = [System.Diagnostics.Stopwatch ]::StartNew()
108+ Write-Host " CIPPBACKUP: Backup Intune Configuration Policies for $TenantFilter "
86109
87110 New-GraphGetRequest - uri ' https://graph.microsoft.com/beta/deviceManagement/deviceCompliancePolicies?$top=999' - tenantid $TenantFilter | ForEach-Object {
88111 New-CIPPIntuneTemplate - TenantFilter $TenantFilter - URLName ' deviceCompliancePolicies' - ID $_.ID
89112 }
113+ $TaskStopwatch.Stop ()
114+ Write-Host " CIPPBACKUP: Intune Compliance backup completed in $ ( $TaskStopwatch.Elapsed.TotalSeconds ) seconds"
90115 }
91116
92117 ' intuneprotection' {
93- Write-Host " Backup Intune Configuration Policies for $TenantFilter "
118+ $TaskStopwatch = [System.Diagnostics.Stopwatch ]::StartNew()
119+ Write-Host " CIPPBACKUP: Backup Intune Configuration Policies for $TenantFilter "
94120
95121 New-GraphGetRequest - uri ' https://graph.microsoft.com/beta/deviceAppManagement/managedAppPolicies?$top=999' - tenantid $TenantFilter | ForEach-Object {
96122 New-CIPPIntuneTemplate - TenantFilter $TenantFilter - URLName ' managedAppPolicies' - ID $_.ID
97123 }
124+ $TaskStopwatch.Stop ()
125+ Write-Host " CIPPBACKUP: Intune Protection backup completed in $ ( $TaskStopwatch.Elapsed.TotalSeconds ) seconds"
98126 }
99127
100128 ' antispam' {
101- Write-Host " Backup Anti-Spam Policies for $TenantFilter "
129+ $TaskStopwatch = [System.Diagnostics.Stopwatch ]::StartNew()
130+ Write-Host " CIPPBACKUP: Backup Anti-Spam Policies for $TenantFilter "
102131
103132 $Policies = New-ExoRequest - tenantid $Tenantfilter - cmdlet ' Get-HostedContentFilterPolicy' | Select-Object * - ExcludeProperty * odata* , * data .type*
104133 $Rules = New-ExoRequest - tenantid $Tenantfilter - cmdlet ' Get-HostedContentFilterRule' | Select-Object * - ExcludeProperty * odata* , * data .type*
@@ -116,11 +145,14 @@ function New-CIPPBackupTask {
116145 }
117146
118147 $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"
119150 $JSON
120151 }
121152
122153 ' antiphishing' {
123- Write-Host " Backup Anti-Phishing Policies for $TenantFilter "
154+ $TaskStopwatch = [System.Diagnostics.Stopwatch ]::StartNew()
155+ Write-Host " CIPPBACKUP: Backup Anti-Phishing Policies for $TenantFilter "
124156
125157 $Policies = New-ExoRequest - tenantid $Tenantfilter - cmdlet ' Get-AntiPhishPolicy' | Select-Object * - ExcludeProperty * odata* , * data .type*
126158 $Rules = New-ExoRequest - tenantid $Tenantfilter - cmdlet ' Get-AntiPhishRule' | Select-Object * - ExcludeProperty * odata* , * data .type*
@@ -138,20 +170,33 @@ function New-CIPPBackupTask {
138170 }
139171
140172 $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"
141175 $JSON
142176 }
143177
144178 ' CippWebhookAlerts' {
145- Write-Host " Backup Webhook Alerts for $TenantFilter "
179+ $TaskStopwatch = [System.Diagnostics.Stopwatch ]::StartNew()
180+ Write-Host " CIPPBACKUP: Backup Webhook Alerts for $TenantFilter "
146181 $WebhookTable = Get-CIPPTable - TableName ' WebhookRules'
147- Get-CIPPAzDataTableEntity @WebhookTable | Where-Object { $TenantFilter -in ($_.Tenants | ConvertFrom-Json ).value }
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
148186 }
149187 ' CippScriptedAlerts' {
150- Write-Host " Backup Scripted Alerts for $TenantFilter "
188+ $TaskStopwatch = [System.Diagnostics.Stopwatch ]::StartNew()
189+ Write-Host " CIPPBACKUP: Backup Scripted Alerts for $TenantFilter "
151190 $ScheduledTasks = Get-CIPPTable - TableName ' ScheduledTasks'
152- Get-CIPPAzDataTableEntity @ScheduledTasks | Where-Object { $_.hidden -eq $true -and $_.command -like ' Get-CippAlert*' -and $TenantFilter -in $_.Tenant }
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
153195 }
154196 }
197+
198+ $FunctionStopwatch.Stop ()
199+ Write-Host " CIPPBACKUP: Total backup task completed in $ ( $FunctionStopwatch.Elapsed.TotalSeconds ) seconds"
155200 return $BackupData
156201}
157202
0 commit comments