backup/Backup-Applications.ps1
|
#Requires -Version 7.0 function Backup-Applications { [CmdletBinding()] param( [Parameter(Mandatory)] [string]$BackupPath, [Parameter(Mandatory)] [SecureString]$Token, [hashtable]$ScopeTagMap = @{} ) try { $baseFolder = Join-Path $BackupPath 'Applications' $uri = '/beta/deviceAppManagement/mobileApps?$filter=(microsoft.graph.managedApp/appAvailability) eq null or (microsoft.graph.managedApp/appAvailability) eq ''lineOfBusiness'' or isAssigned eq true' $items = Invoke-GraphRequest2 -Uri $uri -Token $Token foreach ($item in $items) { # determine platform subfolder $odataType = $item.'@odata.type' if ($odataType -like '*ios*' -or $odataType -like '*iOS*') { $platform = 'iOS' } elseif ($odataType -like '*macOS*' -or $odataType -like '*macos*') { $platform = 'macOS' } elseif ($odataType -like '*android*' -or $odataType -like '*Android*') { $platform = 'Android' } elseif ($odataType -like '*webApp*' -or $odataType -like '*Web*') { $platform = 'Web App' } elseif ($odataType -like '*officeSuite*' -or $odataType -like '*Office*') { $platform = 'Office Suite' } else { $platform = 'Windows' } $folder = Join-Path $baseFolder $platform # construct filename $appType = $odataType -replace '#microsoft\.graph\.', '' $fileName = "$($item.displayName)_$appType" # remove description before saving $item | Add-Member -MemberType NoteProperty -Name 'description' -Value $null -Force $assignments = Resolve-Assignments -AssignmentsUri "/beta/deviceAppManagement/mobileApps/$($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) applications to $baseFolder" } catch { Write-Error "failed to backup applications: $_" return } } Export-ModuleMember -Function Backup-Applications |