PowerShell Event 53504: A PowerShell engine started in a process
PowerShell opened its named-pipe listener for a newly started engine, and recorded the process ID and the AppDomain name. It is routine noise with one useful property: it fires wherever the engine loads, including inside programs that are not powershell.exe.
Also written as PowerShell 53504powershell named pipe IPC
How oftenFires often
Vendor calls itInformation
LogMicrosoft-Windows-PowerShell/Operational
SourceMicrosoft-Windows-PowerShell
What it means for you
On a personal computer
Something started PowerShell. That happens constantly on Windows without anyone opening a blue window — installers, Windows features, and settings pages all use it. It is informational and there is nothing to act on.
For an analyst
Its value is coverage rather than content. Because it is written when the engine initialises rather than when powershell.exe launches, it also fires for hosts that load System.Management.Automation directly — the technique usually described as 'PowerShell without powershell.exe'. Correlate the process ID it reports against process creation: if no PowerShell binary was started but an engine initialised, that is the finding.
What it looks like
Sanitised. Addresses come from the RFC 5737 documentation ranges.
Sample
Log Name: Microsoft-Windows-PowerShell/Operational
Source: Microsoft-Windows-PowerShell
Event ID: 53504
Level: Information
Computer: DESKTOP-WKS042
Windows PowerShell has started an IPC listening thread on process: 4812 in AppDomain: DefaultAppDomain.
The fields that decide it
Everything else in the log line is context.
Process ID
The process the engine started in. This is the field that does the work — resolve it against process creation events for the same second.
A PID belonging to powershell.exe or pwsh.exeOrdinary. The overwhelming majority.
A PID belonging to something else entirelyThe engine was loaded inside another program. Legitimate for some management software, and also what tooling built to avoid powershell.exe looks like.
AppDomain
The .NET application domain the engine started in.
DefaultAppDomainA normal console or script host.
DscPsPluginWkr_AppDomainDesired State Configuration executing a script resource. Distinctive and worth recognising.
An unfamiliar named AppDomainSomething embedded the engine deliberately and named its own domain.
Position in the sequence
It normally lands between Event 40961 (console starting) and Event 40962 (ready for input). A 53504 with no 40961 or 40962 around it means the engine was not started by the console host — which is the case worth looking at.
Ordinary reasons this happens
Most of the time it is one of these.
Any PowerShell console, script, or ISE session starting.
Desired State Configuration applying a configuration, which produces its own distinctly named AppDomain.
Software installers and Windows features that run PowerShell internally during setup.
Management agents — configuration tools, backup products, monitoring software — that host the engine in-process rather than shelling out.
Scheduled tasks and the Task Scheduler's own maintenance work.
When it is not ordinary
PowerShell executed without launching powershell.exe, by loading the automation assembly inside another process.
What gives it awayA 53504 naming a process that is not a PowerShell binary, with no matching 40961 or 40962. Application allowlisting and process-name-based detections both miss this; the engine start does not.
kqlJoins engine starts against process creation to find engines hosted somewhere other than a PowerShell binary.
let ps = Event | where EventLog == 'Microsoft-Windows-PowerShell/Operational' and EventID == 53504 | extend Pid = toint(extract(@'process: (\d+)', 1, RenderedDescription));
ps | join kind=leftouter (SecurityEvent | where EventID == 4688 | project Computer, NewProcessId, NewProcessName, TimeGenerated) on Computer | where NewProcessName !endswith 'powershell.exe' and NewProcessName !endswith 'pwsh.exe'
sigmaDeliberately broad — 53504 has no fields worth filtering on by itself, so it is a collection rule that gets enriched downstream rather than an alert.
What does 'Windows PowerShell has started an IPC listening thread' mean?
PowerShell creates a named pipe for each engine instance so that other tools can attach to it — this is what makes `Enter-PSHostProcess` possible. Event 53504 is written when that listener is set up, which happens every time a PowerShell engine initialises. It is informational and says nothing about what the session went on to do.
Is PowerShell Event 53504 a sign of something bad?
On its own, no — it fires on every PowerShell start, including the many that Windows does by itself. It becomes interesting when the process ID it names does not belong to powershell.exe or pwsh.exe, because that means the engine was loaded inside some other program. Some management software does that legitimately; so does tooling designed to avoid running a PowerShell binary.
What is the AppDomain in Event 53504?
The .NET application domain the engine started inside. Almost always DefaultAppDomain. The one worth recognising is DscPsPluginWkr_AppDomain, which means Desired State Configuration is executing a script resource — a useful marker because DSC activity otherwise looks like ordinary PowerShell.
Why do I see Event 53504 without ever opening PowerShell?
Because a great deal of Windows uses PowerShell internally. Windows Update, feature installs, MSI packages, Settings pages, antivirus definition updates, and management agents all start engines without showing anyone a console window. Seeing these on an idle machine is normal.