backup/Backup-SettingsCatalog.ps1
|
#Requires -Version 7.0 function Backup-SettingsCatalog { [CmdletBinding()] param( [Parameter(Mandatory)] [string]$BackupPath, [Parameter(Mandatory)] [SecureString]$Token, [hashtable]$ScopeTagMap = @{} ) try { $folder = Join-Path $BackupPath 'Settings Catalog' $uri = '/beta/deviceManagement/configurationPolicies' $items = Invoke-GraphRequest2 -Uri $uri -Token $Token foreach ($item in $items) { # fetch settings for this policy $settingsUri = "/beta/deviceManagement/configurationPolicies/$($item.id)/settings?`&top=1000" $settings = Invoke-GraphRequest2 -Uri $settingsUri -Token $Token # attach settings to the policy if ($settings) { $item | Add-Member -MemberType NoteProperty -Name 'settings' -Value $settings -Force } # construct filename based on technologies if ($item.technologies) { $technologiesFormatted = $item.technologies -replace ',', '_' $fileName = "$($item.name)_$technologiesFormatted" } else { $fileName = $item.name } $assignments = Resolve-Assignments -AssignmentsUri "/beta/deviceManagement/configurationPolicies/$($item.id)/assignments" -Token $Token if ($assignments) { $item | Add-Member -MemberType NoteProperty -Name 'assignments' -Value $assignments -Force } $clean = Remove-VolatileKeys -InputObject $item Save-BackupItem -Item $clean -Folder $folder -FileName $fileName -ScopeTagMap $ScopeTagMap } Write-Verbose "backed up $($items.Count) settings catalog policies to $folder" } catch { Write-Error "failed to backup settings catalog policies: $_" return } } Export-ModuleMember -Function Backup-SettingsCatalog |