Functions/Public/Update-DMICache.ps1

<#
.Synopsis
   This command will update the contents of the SQLite database created by New-DMISQLiteDB.
.DESCRIPTION
   This command will update the contents of the SQLite database created by New-DMISQLiteDB.
.PARAMETER ParamCacheOnly
    This will update the tab completion cache for Get-DMIDepartment only and not update the SQLite database.
.EXAMPLE
   PS C:\> Update-DMICache

   This will clear out and populate the SQLite database. It will also update the tab completion cache for Get-DMIDepartment.
#>

function Update-DMICache {
    [CmdletBinding()]
    param (
        [Switch]$ParamCacheOnly
    )
    
    begin {
        
    }
    
    process {
        if(!$ParamCacheOnly){
            Write-Verbose -Message "ParamCacheOnly not specified. Refreshing database information."
            Write-Verbose -Message "Querying raw DMI information from $($Script:Settings.DMIURI)."
            $DMI = [System.Collections.ArrayList]@()
            $DMI += Invoke-RestMethod -Method 'Get' -Uri $Script:Settings.DMIURI -ErrorAction Stop | ConvertFrom-Csv -Delimiter "`t"

            if($DMI.count -gt 0)
            {
                Write-Verbose -Message "Raw data received updating database."
                Invoke-SqliteQuery -DataSource $Script:SQLiteDBPath -Query "DELETE FROM DMI"
                Invoke-SQLiteBulkCopy -DataSource $Script:SQLiteDBPath -DataTable ($DMI | Out-DataTable) -Table 'DMI' -Force
            }
            else
            {
                Throw "No data returned from $($Script:Settings.DMIURI)."
            }
        }

        Write-Verbose -Message 'Updating parameter cache'
        $Script:BannerOrgCodes.Clear()
        $Script:Deptnames.Clear()

        $Script:BannerOrgCodes += (Get-DMIDepartment).Banner_Org
        $Script:Deptnames += (Get-DMIDepartment).Deptname
    }
    
    end {
        
    }
}