Event 4103 is not a Security-log event at all, and that distinction matters before anything else about its content: it lives in the Microsoft-Windows-PowerShell/Operational channel, generated by the PowerShell engine itself rather than the Windows security-auditing subsystem. If your SIEM ingestion is scoped to the Security channel only, as many default configurations are, you are not collecting this event regardless of how your audit policy is configured, a gap worth checking before assuming PowerShell activity is covered.
The event comes from PowerShell's Module Logging feature, and it fires once per pipeline execution, each time a cmdlet, function, script, or external script actually runs. ContextInfo_CommandName records what was invoked, ContextInfo_CommandType records whether that resolved to a Cmdlet, Function, Script, or ExternalScript, and ContextInfo_User records the account under whose session it ran. ContextInfo_HostApplication carries the full command line that launched the PowerShell host process itself, useful context for distinguishing an interactive console session from a script launched by a scheduled task or a remote-execution framework.
Payload is the field that actually carries operational weight: it records the parameter bindings and execution details for the invoked command, which means the argument values passed to whatever ran, not just the command's name. A generic-looking Invoke-WebRequest tells you almost nothing by itself; the same event with a Payload showing a download target and a destination path tells you exactly what happened.
Module Logging's specific value, and the reason this event deserves its own coverage rather than folding into a general PowerShell writeup, is that it operates independently of Script Block Logging, event 4104. A host can have Module Logging enabled and Script Block Logging disabled, in which case 4103 is the only PowerShell telemetry available at all on that host, still naming every cmdlet invoked and every parameter passed, just without the full deobfuscated script text 4104 would otherwise capture. Environments with incomplete PowerShell-logging rollouts, which describes most large environments at some point in their maturity, frequently have exactly this gap: 4103 turned on everywhere, 4104 turned on only in pockets.
That asymmetry cuts the other way too, and it is worth checking explicitly: a host generating 4103 events with no corresponding 4104 for the same session is a visibility gap, not necessarily an attack, but one worth closing, since it means you are seeing command names and arguments without the full script context that would let you distinguish a benign automation script from an obfuscated one using the same handful of cmdlets.
Certain cmdlet and API patterns showing up in the Payload field are worth dedicated matching regardless of everything else: credential-dumping tools invoked from PowerShell, Invoke-WebRequest or .NET download methods fetching remote content, Invoke-Expression executing a string as code, and reflection-based techniques, Add-Type, System.Reflection.Assembly, used to load compiled code directly into the PowerShell process, a common way to bypass Constrained Language Mode restrictions that would otherwise block direct .NET method calls.