Private/Set-FPControlPackages.ps1

function Set-FPControlPackages {
    <#
    .SYNOPSIS
        Install Chocolatey Packages
    .DESCRIPTION
        Process Configuration Control: Chocolatey Package Installs and Upgrades
    .PARAMETER DataSet
        XML data from control file import
    .EXAMPLE
        Set-FPControlPackages -DataSet $xmldata
    .NOTES
        1.0.16 - 12/27/2017 - bug fixes
    #>

    [CmdletBinding()]
    param (
        [parameter(Mandatory = $True)]
        $DataSet
    )
    Write-FPLog "--------- installation assignments: begin ---------"
    $itemcount = $DataSet.count
    foreach ($package in $DataSet) {
        $deviceName = $package.device
        $collection = $package.collection
        $runtime    = $package.when
        $username   = $package.user
        $extparams  = $package.params
        $update     = $package.update
        Write-FPLog "device................ $deviceName"
        Write-FPLog "collection............ $collection"
        Write-FPLog "user.................. $username"
        Write-FPLog "runtime............... $runtime"
        Write-FPLog "autoupdate............ $update"
        if (Test-FPControlRuntime -RunTime $runtime) {
            Write-FPLog "run: runtime is now or already passed"
            $pkglist = $package.InnerText -split ','
            Write-FPLog "packages assigned..... $($pkglist.count)"
            if ($extparams.length -gt 0) { $parm = $extparam } else { $parm = ' -y -r' }
            foreach ($pkg in $pkglist) {
                Write-FPLog "package............... $pkg"
                if (Test-Path "$($env:PROGRAMDATA)\chocolatey\lib\$pkg") {
                    if ($update -eq 'true') {
                        Write-FPLog "package is already installed (upgrade)"
                        $params = "upgrade $pkg $parm"
                    }
                    else {
                        Write-FPLog "package is already installed (no upgrade.. skip)"
                        $params = ""
                    }
                }
                else {
                    Write-FPLog "package is not installed (install)"
                    $params = "install $pkg $parm"
                }
                Write-FPLog "command............... choco $params"
                if (-not $TestMode) {
                    if ($params -ne "") {
                        $p = Start-Process -FilePath "choco.exe" -NoNewWindow -ArgumentList "$params" -Wait -PassThru
                        if ($p.ExitCode -eq 0) {
                            Write-FPLog "result................ successful"
                        }
                        else {
                            Write-FPLog -Category 'Error' -Message "package 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
    if ($itemcount -eq 0) {
        Write-FPLog "no assignments found"
    }
    Write-FPLog "--------- installation assignments: finish ---------"
}