Private/Set-FPControlRemovals.ps1

function Set-FPControlRemovals {
    <#
    .SYNOPSIS
        Uninstall Chocolatey Packages
    .DESCRIPTION
        Uninstall Chocolatey Packages applicable to this computer
    .PARAMETER DataSet
        XML data
    .EXAMPLE
        Set-FPControlRemovals -DataSet $xmldata
    #>

    [CmdletBinding()]
    param (
        [parameter(Mandatory = $True)]$DataSet
    )
    Write-FPLog "--------- removal assignments: begin ---------"
    foreach ($package in $DataSet) {
        $deviceName = $package.device
        $collection = $package.collection
        $runtime    = $package.when
        $autoupdate = $package.autoupdate
        $username   = $package.user
        $extparams  = $package.params
        Write-FPLog "device................ $deviceName"
        Write-FPLog "collection............ $collection"
        Write-FPLog "user.................. $username"
        Write-FPLog "autoupdate............ $autoupdate"
        Write-FPLog "runtime............... $runtime"
        if (Test-FPControlRuntime -RunTime $runtime) {
            Write-FPLog "run: runtime is now or already passed"
            $pkglist = $package.InnerText -split ','
            if ($extparams.length -gt 0) { $params = $extparam } else { $params = ' -y -r' }
            foreach ($pkg in $pkglist) {
                Write-FPLog "package............... $pkg"
                if (Test-Path "$($env:PROGRAMDATA)\chocolatey\lib\$pkg") {
                    Write-FPLog "package is installed"
                    $params = "uninstall $pkg $params"
                } else {
                    Write-FPLog "package is not installed (skip)"
                    break
                }
                Write-FPLog "command............... choco $params"
                if (-not $TestMode) {
                    $p = Start-Process -FilePath "choco.exe" -NoNewWindow -ArgumentList "$params" -Wait -PassThru
                    if ($p.ExitCode -eq 0) {
                        Write-FPLog "removal was successful"
                    } else {
                        Write-FPLog -Category 'Error' -Message "removal exit code: $($p.ExitCode)"
                    }
                } else {
                    Write-FPLog "TESTMODE: Would have been applied"
                }
            } # foreach
        } else {
            Write-FPLog "skip: not yet time to run this assignment"
        }
    } # foreach
    Write-FPLog "--------- removal assignments: finish ---------"
}