EventViewerX is a free, open source business intelligence & reporting project written in C# and released under MIT. It has 731 GitHub stars, 69 forks and 19 open issues, and was last pushed 4 days ago. On this registry it ranks #32 of 34 tracked projects in Business Intelligence & Reporting, with 5 head-to-head comparisons available.

What is EventViewerX?

EventViewerX is an MIT-licensed C# engine with a thin PowerShell surface called PSEventViewer that queries, reports on, exports, and automates Windows Event Log data from live channels, remote sessions, Windows Event Collector subscriptions, provider messages, and saved EVTX files, and it is aimed at Windows and PowerShell administrators, .NET developers, and teams doing Active Directory event reporting.

What it is

EventViewerX is high-performance Windows Event Log tooling for .NET and PowerShell. PSEventViewer is the thin PowerShell surface; EventViewerX is the reusable C# engine underneath it. Live channels, remote sessions, WEC, provider messages, and Windows configuration all use the Windows Event Log APIs. Reading a saved .evtx file is what this project calls offline work: the default saved-file path still uses the Windows Eventing APIs, while the optional EventViewerX.Evtx package adds a dependency-backed adapter for Linux, macOS, and Windows that plugs into the core ISavedEventReader contract and therefore feeds the same typed projection, detection, reporting, and storage pipeline. That package is separate because it brings in the third-party evtx parser and its dependencies; there is no EventViewerX.Offline package.

The concrete problem it solves is fragmentation in Windows event reporting. PSWinReporting began as an Active Directory event-reporting module, and PSWinReportingV2 broadened that work, while PSEventViewer grew into a focused PowerShell module and reusable .NET engine; those projects increasingly solved the same problems from different starting points. In August 2026 the PSWinReporting and PSWinReportingV2 lines were frozen and folded into this home, with Git histories preserved rather than copied as a source-only snapshot, and the former EvotecIT/PSWinReporting repository was renamed to EvotecIT/EventViewerX. The installable names did not change: PowerShell users still install PSEventViewer, .NET users still reference the EventViewerX packages, and PSWinReporting and PSWinReportingV2 remain available as frozen lines.

Key capabilities

  • Queries live channels, remote sessions, WEC subscriptions, provider messages, and Windows configuration through the Windows Event Log APIs.
  • Offers a managed EvtxSavedEventReader adapter that reads .evtx files on Linux, macOS, and Windows with no external executable, opt-in because its allocation cost misses the production performance gate.
  • Provides EvtxDumpSavedEventReader as an explicit alternate parser that executes a caller-owned evtx_dump path, never downloading or updating that tool, and normalizes streaming JSONL into the same EVX contracts.
  • Routes both portable adapters through the ISavedEventReader contract so they feed one typed projection, detection, reporting, and storage pipeline.
  • Recognizes literal BinXML records produced by rendered WEC subscriptions through a bounded, spec-aligned EVX reader.
  • Supports standard XPath 1.0 in the portable adapters rather than every Windows Event Log XPath extension, and omits provider-formatted messages there.
  • Ships a fidelity gate that runs on Linux and reports header, chunk, recovery, and parser diagnostics explicitly.

Who uses it and how

  • Active Directory reporting teams migrating off the frozen PSWinReporting and PSWinReportingV2 lines, which now share this home and Git history.
  • PowerShell administrators who install PSEventViewer from the PowerShell Gallery and drive the engine through that module.
  • .NET developers who reference the EventViewerX packages directly and build on the C# engine.
  • Cross-platform and CI workflows that need saved-file parsing, since the managed adapter and the fidelity gate run on Linux, and a retained sanitized archive fixture exercises that path on Windows and Linux CI.
  • WEC and ForwardedEvents operators, where the managed adapter preserved all 653 records of the archived ForwardedEvents fidelity fixture with complete identity parity, and preserved all 62,031 records of a 31.5 MB Security fixture with 100% identity parity against Windows.

Getting started

PowerShell users install the PSEventViewer module from the PowerShell Gallery at https://www.powershellgallery.com/packages/PSEventViewer; .NET users reference the EventViewerX packages. Reading saved files on non-Windows platforms requires adding the optional EventViewerX.Evtx package.

How it compares

Among the tools named here, EventViewerX now stands as the single home for what PSWinReporting, PSWinReportingV2, and PSEventViewer each addressed from different starting points, with the older reporting lines frozen and their history preserved in this repository rather than left as separate projects. Its portable path is also positioned against the third-party evtx parser and the evtx_dump executable: the former is packaged as an opt-in adapter instead of being required, and the latter is executed as a caller-owned binary rather than downloaded or updated by this project.

When to use it — and when not to

Use it when Windows event querying, reporting, and export need one typed pipeline that spans live channels, remote sessions, WEC, and saved .evtx files, and keep diagnostics enabled for either offline engine. Be aware of the trade-offs a self-hoster inherits: the managed EvtxSavedEventReader preserved 62,031 records at 100% identity parity but processed about 5,364 events per second with roughly 720 KB allocated per event, against 41,719 events per second and 3.5 KB per event on the Windows path, which is why it remains opt-in and misses the production performance gate. Do not pick the portable adapters if provider-formatted messages or Windows Event Log XPath extensions beyond standard XPath 1.0 are required; the evtx_dump route is also precise to one microsecond rather than the final 100-nanosecond FILETIME digit, and the retained truncated fixture is handled only by the managed adapter.

project readme (upstream, from github) — read inline

EventViewerX

High-performance Windows Event Log tooling for .NET and PowerShell.

PSEventViewer is the thin PowerShell surface. EventViewerX is the reusable C# engine underneath it. Live channels, remote sessions, WEC, provider messages, and Windows configuration use the Windows Event Log APIs. Saved EVTX files can also use an explicitly selected portable adapter.

In this project, offline means reading a saved .evtx file instead of an active channel. The default saved-file path still uses Windows Eventing APIs. EventViewerX.Evtx is an optional dependency-backed adapter for Linux, macOS, and Windows; it plugs into the core ISavedEventReader contract and therefore feeds the same typed projection, detection, reporting, and storage pipeline. The separate package exists because it adds the third-party evtx parser and its dependencies—there is no EventViewerX.Offline package.

Both portable adapters omit provider-formatted messages and support standard XPath 1.0 rather than every Windows Event Log XPath extension. The managed EvtxSavedEventReader requires no external executable, but remains opt-in because its current allocation cost misses the production performance gate. On a 31.5 MB Security fixture it preserved all 62,031 records and achieved 100% identity parity with Windows, but processed about 5,364 events/second with roughly 720 KB allocated/event versus 41,719 events/second and 3.5 KB/event for the Windows path. The fidelity gate also runs on Linux and reports header, chunk, recovery, and parser diagnostics explicitly.

The managed adapter also recognizes literal BinXML records produced by rendered WEC subscriptions and routes them through a bounded, spec-aligned EVX reader. It preserved all 653 records from the archived ForwardedEvents fidelity fixture with complete identity parity; the retained sanitized archive fixture exercises that path on Windows and Linux CI. EvtxDumpSavedEventReader remains an explicit alternate parser: it executes a caller-owned evtx_dump path, never downloads or updates the tool, and normalizes streaming JSONL into the same EVX contracts. Its timestamps are precise to one microsecond rather than the final 100-nanosecond FILETIME digit, and the retained truncated fixture is handled only by the managed adapter. Keep diagnostics enabled for either engine.

PowerShell Gallery PowerShell Gallery downloads Test .NET Test PowerShell License

One project, one home

PSWinReporting began as an Active Directory event-reporting module. Its second generation, PSWinReportingV2, broadened that work, while PSEventViewer grew into the focused PowerShell module and reusable EventViewerX .NET engine used for modern Windows Event Log automation.

Those projects increasingly solved the same problems from different starting points. In August 2026, the PSWinReporting and PSWinReportingV2 lines were frozen and folded into the PSEventViewer/EventViewerX home. Their Git histories were preserved rather than copied as a source-only snapshot, and the former EvotecIT/PSWinReporting repository was renamed to EvotecIT/EventViewerX. The old PSWinReporting URL redirects here; the former PSEventViewer repository is now an archive that points here.

The names users install have not changed:

  • PowerShell users continue to install PSEventViewer.
  • .NET users continue to reference the EventViewerX packages.
  • PSWinReporting and PSWinReportingV2 remain available as frozen packages for existing deployments, but new development belongs here.

The final frozen sources remain available on dedicated branches:

The master branch is the active home of PSEventViewer and EventViewerX.

Why use it

  • Stream local channels, remote channels, offline EVTX files, or structured QueryList XML without accumulating the complete result.
  • Push event ID, provider, time, record ID, level, keyword, user, and event-data filtering into the Windows query engine.
  • Choose exactly how much work each record needs: metadata, formatted message, structured payload, or the complete projection.
  • Request deterministic provider messages such as en-US, with explicit fallback and render status.
  • Query several hosts, channels, or files concurrently and merge results in a deterministic order with bounded memory.
  • Export directly to CSV, JSON Lines, XML, or native EVTX without passing one PowerShell object per event through a file pipeline.
  • Use native bookmarks, durable record checkpoints, subscriptions, watchers, provider and channel catalogs, classic log management, WEC subscription management, and both classic and manifest event writing.
  • Query built-in typed event definitions and composite workflows such as failed logons, lockouts, group changes, Kerberos failures, AAD Connect health, IIS failures, and OS crashes.
  • Evaluate versioned native detections and supported Sigma rules with bounded threshold, distinct-value, temporal, and ordered correlation state.
  • Preserve finding evidence, rule provenance, source coverage, and three event clocks in reusable incident timelines. Short-window analysis needs no database; SQLite history is optional for restart-safe and long-lookback work.
  • Turn the same normalized result into responsive HTML, an Excel workbook, or an email package without querying the event log again.

Install

Install-Module -Name PSEventViewer -Scope CurrentUser
Import-Module PSEventViewer

# Optional CLI for interactive use and automation on hosts with .NET 10.
dotnet tool install --global EventViewerX.Cli --version 4.0.0
evx --version

The module supports Windows PowerShell 5.1 and PowerShell 7+. EventViewerX targets .NET Framework 4.7.2, .NET 8 for Windows, and .NET 10 for Windows. The CLI is also available as RID-specific release ZIPs. Use a framework-dependent ZIP when .NET 10 is installed, or PortableCompat when the target host needs the runtime bundled with the executable.

Documentation

  • Onboarding and prerequisites: local-first readiness, explicit Active Directory discovery, direct versus WEC collection, audit policy, permissions, firewall, and a complete scheduled daily AD-change report.
  • PowerShell guide: local, remote, offline, large logs, export, checkpoints, watchers, administration, WEC, script recovery, and writes.
  • EventViewerX .NET guide: typed synchronous and asynchronous reads, batching, subscriptions, exports, administration, and writes.
  • Custom provider guide: PowerShell hashtables, JSON, typed C#, build/install, signing/trust, named writes, upgrades, repair, rollback, and removal.
  • Custom event definitions: one portable typed schema shared by query, reports, watchers, WEC, C#, and evx.exe.
  • Troubleshooting: performance, permissions, remoting, message resources, EVTX, checkpoints, and provider deployment.
  • Security and ownership boundaries: remote credentials, pack trust, regex policy, sensitive reports, database encryption and backup, durable outbox state, portable parsers, and provider installation.
  • Migrating to 4.0: replace legacy schedules safely, use presets, aggregation, persistent Group Policy context, and interpret completeness evidence.
  • Roadmap: the 4.0 release gate, active contracts, and deliberately deferred product decisions.
  • Documentation index, event query benchmark contract, and local history benchmark contract.

PowerShell quick start

## Fast system-field scan. No provider message or XML is materialized.
Get-EVXEvent -LogName Security -EventId 4624, 4625 `
    -TimePeriod Last24Hours -ReadMode Metadata -MaxEvents 1000

## Deterministic Englis

readme truncated — read the full docs on github

Frequently asked questions

Is EventViewerX free to use?

EventViewerX is open source under the MIT licence. There is no licence fee and no seat count — you can self-host it or, where the project offers one, pay a vendor for a managed version instead.

What does EventViewerX do?

Windows Event Log tooling for PowerShell and .NET: typed queries, reporting, export, WEC, automation, and the PSEventViewer module.

What is EventViewerX written in?

EventViewerX is primarily written in C#. Its source is publicly available at https://github.com/EvotecIT/EventViewerX, and it has 731 GitHub stars.