Private/Invoke-SACTempAutodeskCleanup.ps1

function Invoke-SACTempAutodeskCleanup {
    <#
    .SYNOPSIS
        Cleans Autodesk-specific files and folders from user and system temp folders.
    .DESCRIPTION
        Searches all user Temp directories and Windows Temp for files/directories
        matching Autodesk patterns and removes them.
    #>

    $Patterns = @(
        "*adsk*",
        "*autodesk*",
        "*AdAppMgr*",
        "*AdODIS*",
        "*ODIS*",
        "*GenuineService*",
        "*Genuine Service*",
        "*AdSSO*",
        "*AcWebBrowser*",
        "*Navisworks*",
        "*Civil3D*",
        "*Civil 3D*",
        "*Revit*",
        "*AutoCAD*",
        "*Inventor*",
        "*3dsMax*",
        "*3ds Max*",
        "*Maya*",
        "*mc3_*",
        "*MC3Info*",
        "*InfraWorks*",
        "*Autodesk Forma*",
        "*AutodeskForma*",
        "*Autodesk Docs*",
        "*ACCDocs*",
        "*Autodesk Fusion*",
        "*Fusion360*",
        "*Fusion 360*",
        "*Autodesk Alias*",
        "*Autodesk Vault*",
        "*Vault*Client*",
        "*Moldflow*",
        "*Modlflow*",
        "*Netfabb*",
        "*Autodesk Construction Cloud*",
        "*BIM 360*",
        "*BIM360*"
    )

    $TempPaths = @()
    # 1. Current user/Windows temp
    if ($env:TEMP) { $TempPaths += $env:TEMP }
    $TempPaths += "C:\Windows\Temp"

    # 2. All user temp folders (resolved dynamically)
    $UserProfilesBase = "C:\Users"
    if (Test-Path $UserProfilesBase) {
        Get-ChildItem -Path $UserProfilesBase -Directory -ErrorAction SilentlyContinue |
            Where-Object { $_.Name -notmatch "^(Public|Default|Default User|All Users)$" } |
            ForEach-Object {
                $userTemp = Join-Path $_.FullName "AppData\Local\Temp"
                if (Test-Path $userTemp) {
                    $TempPaths += $userTemp
                }
            }
    }

    $TempPaths = $TempPaths | Select-Object -Unique

    Write-SACMsg "Searching temp directories for Autodesk-related files/folders..." "Info"

    foreach ($tempPath in $TempPaths) {
        if (-not (Test-Path $tempPath)) { continue }
        
        foreach ($pattern in $Patterns) {
            Get-ChildItem -Path $tempPath -Filter $pattern -ErrorAction SilentlyContinue | ForEach-Object {
                $item = $_
                try {
                    Remove-Item $item.FullName -Recurse -Force -ErrorAction Stop
                    Write-SACMsg "Purged temp item: $($item.FullName)" "Success"
                }
                catch {
                    Write-SACQuietLog "Skipped/Failed to delete temp item $($item.FullName): $($_.Exception.Message)"
                }
            }
        }
    }
}