Skip to content

Events

Pode lets you register scripts to be run when certain server events are triggered. The following types of events can have scripts registered:

Event Description Runspaces Open?
Starting Triggered during the initialization phase of the server, just after configuration has been loaded. No
Start Triggered just after the server's -ScriptBlock has been invoked. No
Running Triggered after all runspaces have been opened and are running. Yes
Restarting Triggered just after a server restarted is initiated, but just before clean-up has begun. Yes
Restart Triggered after the server restarts, after the clean-up has occurred. Yes
Terminate Triggered just before the server terminates. Yes
Crash Triggered if the server terminates due to an unhandled exception being thrown. Unstable
Stop Triggered when the server stops - after either a Terminate or Crash. Yes
Suspending Triggered when the server begins the suspension process. Yes
Suspend Triggered when the server completes the suspension process. Yes
Resuming Triggered when the server begins the resuming process after suspension Yes
Resume Triggered when the server resumes operation after suspension. Yes
Enable Triggered when the server is enabled. Yes
Disable Triggered when the server is disabled. No
Browser Triggered when the server is told to open in a browser. Yes

And these events are triggered in the following order:

graph TD
    Launch((Launch)) --> Starting(Starting)
    Starting --> Start(Start)
    Start --> Running(Running)
    Running --natural stop --> Terminate(Terminate)
    Running --unhandled exception --> Crash(Crash)
    Running -- internal restart --> Restarting(Restarting)
    Running -- open --> Browser(Browser)
    Running --> Suspending(Suspending) --> Suspend(Suspend)
    Suspend --> Resuming(Resuming) --> Resume([Resume])
    Running --> Disable(Disable) --> Enable([Enable])
    Restarting --> Restart(Restart)
    Restart --> Starting
    Terminate --> Stop(Stop)
    Crash --> Stop
    Stop --> End((End))

Note

Resume and Enable both end up back at the "Running" state, but will not trigger the Running event.

Register

You can use Register-PodeEvent to register a scriptblock that can be run when a server level event within Pode is triggered. Each event can have multiple scripts registered.

For example, to register for when the server Starts:

Register-PodeEvent -Type Start -Name 'OnStart' -ScriptBlock {
    # inform a portal, write a log, etc
}

The scriptblock supplied to Register-PodeEvent also supports $using: variables. You can retrieve a registered script using Get-PodeEvent:

$evt = Get-PodeEvent -Type Start -Name 'OnStart'

Event Data

Various metadata about the server event is supplied to your scriptblock, under the $TriggeredEvent variable:

Property Description
Lockable A global lockable value you can use for Lock-PodeObject
Metadata Any additional metadata about the event, you can add your own properties here as well
Type The type of event triggered - Start, Running, Restart, etc.
Timestamp When the event was triggered, in UTC

Unregister

To unregister an previous event registration, simply use Unregister-PodeEvent:

# to remove the Start event from above:
Unregister-PodeEvent -Type Start -Name 'OnStart'

Other Events

The events listed above are Server related events, you can find various other events for other functionality listed below: