Private/Invoke-AIUsageScan.ps1
|
# Invoke-AIUsageScan.ps1 - Orchestrator for AI usage scanning function Invoke-AIUsageScan { <# .SYNOPSIS Orchestrate AI usage scanning across selected browsers. .DESCRIPTION Coordinates browser history parsing across Chrome, Edge, Firefox, and Safari. Aggregates results and handles errors gracefully for each browser. .PARAMETER Browsers Array of browsers to scan. Valid values: Chrome, Edge, Firefox, Safari. .PARAMETER DaysBack Number of days of history to scan. Default is 90. .PARAMETER AllUsers Scan all users on the system instead of just the current user. Requires elevated/admin permissions. .EXAMPLE Invoke-AIUsageScan -Browsers @('Chrome', 'Safari') -DaysBack 30 .EXAMPLE Invoke-AIUsageScan -Browsers @('Chrome') -AllUsers #> [CmdletBinding()] param( [Parameter(Mandatory)] [ValidateSet('Chrome', 'Edge', 'Firefox', 'Safari')] [string[]] $Browsers, [int] $DaysBack = 90, [switch] $AllUsers ) Write-Verbose "Starting AI usage scan for browsers: $($Browsers -join ', ')" Write-Verbose "Scanning last $DaysBack days of history" if ($AllUsers) { Write-Verbose "AllUsers mode enabled - scanning all users on system" if (-not (Test-IsElevated)) { Write-Warning "AllUsers mode requires elevated/admin permissions. Some user directories may not be accessible." } } # Initialize results structure $results = @{ Machine = [System.Environment]::MachineName ScanTime = Get-Date DaysBack = $DaysBack Browsers = @{} Errors = @() } foreach ($browser in $Browsers) { Write-Verbose "Processing browser: $browser" try { $findings = switch ($browser) { 'Chrome' { Get-ChromeHistory -DaysBack $DaysBack -AllUsers:$AllUsers } 'Edge' { Get-EdgeHistory -DaysBack $DaysBack -AllUsers:$AllUsers } 'Firefox' { Get-FirefoxHistory -DaysBack $DaysBack -AllUsers:$AllUsers } 'Safari' { Get-SafariHistory -DaysBack $DaysBack -AllUsers:$AllUsers } } $results.Browsers[$browser] = @($findings) Write-Verbose "$browser scan complete: $($findings.Count) findings" } catch { $errorMsg = "Failed to scan $browser`: $_" Write-Warning $errorMsg $results.Errors += $errorMsg $results.Browsers[$browser] = @() } } # Calculate summary statistics $totalFindings = 0 $uniqueTools = @{} $categoryBreakdown = @{} foreach ($browser in $results.Browsers.Keys) { foreach ($finding in $results.Browsers[$browser]) { $totalFindings++ $uniqueTools[$finding.Tool] = $true if (-not $categoryBreakdown.ContainsKey($finding.Category)) { $categoryBreakdown[$finding.Category] = 0 } $categoryBreakdown[$finding.Category]++ } } $results.Summary = @{ TotalFindings = $totalFindings UniqueTools = $uniqueTools.Keys.Count ToolsList = @($uniqueTools.Keys | Sort-Object) CategoryBreakdown = $categoryBreakdown BrowsersScanned = $Browsers.Count } Write-Verbose "Scan complete. Total findings: $totalFindings across $($uniqueTools.Keys.Count) unique AI tools" return $results } |