Public/Test-OSDAppCache.ps1
|
function Test-OSDAppCache { [CmdletBinding()] param( [string[]]$Name, [switch]$ResolveVersions, [switch]$VerifySignatures, [ValidateNotNullOrEmpty()] [string]$CachePath ) $resolvedCachePath = $null if ($PSBoundParameters.ContainsKey('CachePath')) { $resolvedCachePath = [IO.Path]::GetFullPath([Environment]::ExpandEnvironmentVariables($CachePath)) } else { try { $resolvedCachePath = Get-OSDAppCachePath } catch { } } if (-not $resolvedCachePath -or -not (Test-Path -LiteralPath $resolvedCachePath -PathType Container)) { return [pscustomobject]@{ PSTypeName = 'OSDApps.CacheValidation' CachePath = $resolvedCachePath CacheAvailable = $false EntryCount = 0 ValidEntryCount = 0 InvalidEntryCount = 0 TotalSizeMB = 0 SignatureChecksRequested = [bool]$VerifySignatures SignatureChecksComplete = $false SignatureFailureCount = 0 Entries = @() Valid = $false } } $inventoryParameters = @{ Name = $Name ResolveVersions = [bool]$ResolveVersions VerifySignatures = [bool]$VerifySignatures CachePath = $resolvedCachePath } $entries = @(Get-OSDAppCache @inventoryParameters) $invalidEntries = @($entries | Where-Object { -not $_.Valid }) $validEntries = @($entries | Where-Object { $_.Valid }) $signatureCandidates = @( $entries | Where-Object { $_.Source -eq 'BuiltIn' -and $_.SignatureStatus -ne 'Not assessed' -and $_.SignatureScope } ) $signatureFailures = @( $signatureCandidates | Where-Object { $_.SignatureStatus -notin @('Valid', 'Unavailable in WinPE') } ) $signatureChecksComplete = if (-not $VerifySignatures) { $false } else { @($signatureCandidates | Where-Object { $_.SignatureStatus -ne 'Valid' }).Count -eq 0 } $totalSize = ($entries | Measure-Object -Property SizeMB -Sum).Sum if ($null -eq $totalSize) { $totalSize = 0 } [pscustomobject]@{ PSTypeName = 'OSDApps.CacheValidation' CachePath = $resolvedCachePath CacheAvailable = $true EntryCount = $entries.Count ValidEntryCount = $validEntries.Count InvalidEntryCount = $invalidEntries.Count TotalSizeMB = [math]::Round([double]$totalSize, 1) SignatureChecksRequested = [bool]$VerifySignatures SignatureChecksComplete = $signatureChecksComplete SignatureFailureCount = $signatureFailures.Count Entries = @($entries) Valid = ( $entries.Count -gt 0 -and $invalidEntries.Count -eq 0 -and (-not $VerifySignatures -or $signatureChecksComplete) ) } } |