Public/Invoke-SmartAnalyzer.ps1
function Invoke-SmartAnalyzer { [CmdletBinding(SupportsShouldProcess = $true)] param ( [Parameter(Mandatory)] [string]$Path, [string[]]$IncludeKeywords = @(), [string[]]$ExcludeKeywords = @(), [datetime]$StartTime, [datetime]$EndTime, [ValidateSet("Forward", "Reverse")] [string]$SortOrder = "Forward", [int[]]$EventId, [string[]]$Level, [string[]]$ProviderName, [string]$ExportPath, [ValidateSet("CSV", "JSON")] [string]$ExportFormat = "CSV", [string]$ReportPath, [ValidateSet("Text", "Json", "Csv", "Html")] [string]$ReportFormat = "Text", [switch]$RedactSensitiveData, [switch]$GenerateRedactionLog, [switch]$IncludeMetadata ) try { # Dynamically build parameters for Get-LogEntries $params = @{ Path = $Path } if ($IncludeKeywords) { $params.IncludeKeywords = $IncludeKeywords } if ($ExcludeKeywords) { $params.ExcludeKeywords = $ExcludeKeywords } if ($StartTime) { $params.StartTime = $StartTime } if ($EndTime) { $params.EndTime = $EndTime } if ($SortOrder) { $params.SortOrder = $SortOrder } if ($EventId) { $params.EventId = $EventId } if ($Level) { $params.Level = $Level } if ($ProviderName) { $params.ProviderName = $ProviderName } if ($ExportPath) { $params.ExportPath = $ExportPath } if ($ExportFormat) { $params.ExportFormat = $ExportFormat } # Process logs $logEntries = Get-LogEntries @params $summary = Get-LogSummary -LogLines $logEntries # Conditionally export report if ($ReportPath -and $PSCmdlet.ShouldProcess($ReportPath, "Export SmartLogAnalyzer Report")) { Export-LogReport -Summary $summary ` -Entries $logEntries ` -SourcePath $Path ` -OutputPath $ReportPath ` -Format $ReportFormat ` -Redact:$RedactSensitiveData ` -IncludeMetadata:$IncludeMetadata ` -GenerateRedactionLog:$GenerateRedactionLog Write-Information "📄 Report exported to: $ReportPath" } return [pscustomobject]@{ Entries = $logEntries Summary = $summary } } catch { Write-Error $_.Exception.Message throw "❌ Smart Analyzer failed. See error details above." } } # SIG # Begin signature block # MIIFsAYJKoZIhvcNAQcCoIIFoTCCBZ0CAQExDzANBglghkgBZQMEAgEFADB5Bgor # BgEEAYI3AgEEoGswaTA0BgorBgEEAYI3AgEeMCYCAwEAAAQQH8w7YFlLCE63JNLG # KX7zUQIBAAIBAAIBAAIBAAIBADAxMA0GCWCGSAFlAwQCAQUABCBil8rs1vLlt28e # b0t7eubhPhqGPrZAKOn8cmaTifpOW6CCAxwwggMYMIICAKADAgECAhAVMtqhUrdy # mkjK9MI220b3MA0GCSqGSIb3DQEBCwUAMCQxIjAgBgNVBAMMGVNtYXJ0TG9nQW5h # bHl6ZXIgRGV2IENlcnQwHhcNMjUwNjE4MjIxMTA3WhcNMjYwNjE4MjIzMTA3WjAk # MSIwIAYDVQQDDBlTbWFydExvZ0FuYWx5emVyIERldiBDZXJ0MIIBIjANBgkqhkiG # 9w0BAQEFAAOCAQ8AMIIBCgKCAQEAzLQdDt7qLciu6u2CtXOuwfSDoMKY73xMjh7l # AcWWteWEvv9zLo6zQ02uHX5Xgz+dLyNhYs0kqQor4s8DkSRRQXzr90IENyL5LG5B # sMyFhhmmUjA4QFQxgn5exm4DI56hNw/VrDKTkGUvHE2SAai7spZBSkU6hXe2+aEj # Ld9vdbJc5gS0iGQ+XIF6oJUB3owuQE+30WFZaGpqtHfS8jtxkwUsfwxM1Y2AK+Zj # Mv1P+njfhVDbfIsXS051dtXbeE5ClEu5XINZP7zVXy4XEsGo/br/cA3OubbEzEJW # SnPVuuZGsw4SoM3RJx0MVPZG4vd2YLZDKiJYqv3uJBgQi4LYhQIDAQABo0YwRDAO # BgNVHQ8BAf8EBAMCB4AwEwYDVR0lBAwwCgYIKwYBBQUHAwMwHQYDVR0OBBYEFEOg # ZC7C7IdkMQsB+4Eti+0plKQ1MA0GCSqGSIb3DQEBCwUAA4IBAQDJ+i2wjjPtCzjF # hrZw0IfpPcOOy/1fQXAryX52thXIA/Wcb+6qi5WmEpHZtZTxnZ3qyIkRpGa0NsuH # BlYu0HlTN9Y6JA25gdiOQ9idDpUbpOz+gfD/t9vs0+cQC664l7mnFqHGXRrSsC4N # zLYnde5ROU3NWfUkZyEsftBk0IghIi4qvJXAW3ic6dDQdq4rEpuUrI+pa2R2h1nE # sjkv2ru5yL58u8zS7enQ4XGMJRfcow4yyS55a3tQYtnZzCyWS7AeYkbTTjzE4Oxg # p31zzX01eYEundHvZAxoLg7QENvbqWiFwkbx7ssc/6ehiwOapNUhJTOB1glNAqX/ # rGRwMRitMYIB6jCCAeYCAQEwODAkMSIwIAYDVQQDDBlTbWFydExvZ0FuYWx5emVy # IERldiBDZXJ0AhAVMtqhUrdymkjK9MI220b3MA0GCWCGSAFlAwQCAQUAoIGEMBgG # CisGAQQBgjcCAQwxCjAIoAKAAKECgAAwGQYJKoZIhvcNAQkDMQwGCisGAQQBgjcC # AQQwHAYKKwYBBAGCNwIBCzEOMAwGCisGAQQBgjcCARUwLwYJKoZIhvcNAQkEMSIE # ICf5e4JvwwCNpPIn+wwU0matuwLeWiSQ0ZsnorzDgN9sMA0GCSqGSIb3DQEBAQUA # BIIBAL3IWh7FsOS11+zQ62LWCinJqHz771uCEiYPJTaKFGLOnKAzT/SwcyKZXJZ/ # BnXkKgdmleUwNn7VuBi9w4mHF1GP78u9aSyKe0qfsjzyrufQ1HICcNZWqQmzAukw # 0QYIZIMG7Q+l93iEy8270PfZ9rjjnvOTifnXXilpedVydxZ1+J2EFKRcWFoQb134 # 9yd3gONStW+TTp0yIn5g6IBNtp1V84tN7ZNryAsL1+YqFb3YFndJysl/VxHkU2T3 # uNndnpn8AUMNIM4wT63Yg456C50cEVQ65iwy2l3aut6OtLg7gqv35c3ewDG8I3dk # FgjQheJ+l1CJIyKOTEAzu61w+3Q= # SIG # End signature block |