public/Get-DefaultAppAssociations.ps1

function Get-DefaultAppAssociations {
    <#
    .SYNOPSIS
        Get Windows default app associations table
    .DESCRIPTION
        Returns default app associations for the current user
    .PARAMETER FilePath
        Path where export file is saved/maintained.
        Default path is user Documents path. Default filename is defaultapps.xml. For example: $($env:USERPROFILE)\Documents\defaultapps.xml
    .PARAMETER RefreshDays
        Number of days to reuse export file until forcing a refresh. The default value is 7 (days)
    .PARAMETER Force
        Force a refresh of the export file
    .EXAMPLE
        Get-DefaultAppAssociations
    .EXAMPLE
        Get-DefaultAppAssociations -Force
    .LINK
        https://github.com/Skatterbrainz/helium/blob/master/docs/Get-DefaultAppAssociations.md
    #>

    [CmdletBinding()]
    param (
        [parameter()][string]$FilePath = "$($env:USERPROFILE)\documents\defaultapps.xml",
        [parameter()][int32]$RefreshDays = 7,
        [parameter()][switch]$Force
    )
    if ($PSVersionTable.Platform -eq 'Unix') { throw "No supported on Linux systems" }
    if (!(Test-Path $FilePath)) {
        Write-Verbose "creating new snapshot: $FilePath"
        $null = $(dism /Online /Export-DefaultAppAssociations:$FilePath)
    } else {
        Write-Verbose "checking the age of the last snapshot"
        if ($Force -or ($RefreshDays -eq 0) -or ((New-Timespan (Get-Item -Path $FilePath | Select-Object -ExpandProperty LastWriteTime) (Get-Date)).Days -gt $RefreshDays)) {
            Write-Verbose "file is older than $RefreshDays days - deleting file"
            $null = Remove-Item -Path $FilePath -Force
            Write-Verbose "creating new snapshot: $FilePath"
            $null = $(dism /Online /Export-DefaultAppAssociations:$FilePath)
        }
    }
    if (Test-Path $FilePath) {
        Write-Verbose "reading snapshot file to get app associations"
        $appdefs = [xml](Get-Content -Path $FilePath)
        Write-Verbose "returned $($appdefs.Count) app associations"
        Write-Output @($appdefs.DefaultAssociations.Association)
    } else {
        Write-Warning "unable to generate app associations snapshot file: $FilePath"
    }
}