Private/Get-CacheItem.ps1
|
function Get-CacheItem { <# .SYNOPSIS Retrieves an item from the cache if it exists and hasn't expired. .PARAMETER Key The cache key to retrieve. .PARAMETER ExpirationMinutes Override the default expiration time in minutes. #> [CmdletBinding()] param( [Parameter(Mandatory)] [string]$Key, [Parameter()] [int]$ExpirationMinutes = $script:CacheExpirationMinutes ) if (-not $script:CacheEnabled) { return } $cacheFile = Join-Path -Path $script:CacheDirectory -ChildPath "$Key.json" if (-not (Test-Path -Path $cacheFile)) { Write-Verbose "Cache miss: $Key (file not found)" return } try { $cacheData = Get-Content -Path $cacheFile -Raw | ConvertFrom-Json # Check cache version if ($cacheData.Version -ne $script:CacheVersion) { Write-Verbose "Cache miss: $Key (version mismatch)" Remove-Item -Path $cacheFile -Force -ErrorAction SilentlyContinue return } # Check expiration $cacheAge = (Get-Date) - [DateTime]$cacheData.Timestamp if ($cacheAge.TotalMinutes -gt $ExpirationMinutes) { Write-Verbose "Cache miss: $Key (expired, age: $($cacheAge.TotalMinutes) minutes)" Remove-Item -Path $cacheFile -Force -ErrorAction SilentlyContinue return } Write-Verbose "Cache hit: $Key (age: $([int]$cacheAge.TotalMinutes) minutes)" return $cacheData.Data } catch { Write-Verbose "Cache error reading $Key`: $_" Remove-Item -Path $cacheFile -Force -ErrorAction SilentlyContinue return } } |