Functions/GherkinHook.ps1

function Hook {
    [CmdletBinding(DefaultParameterSetName="All")]
    param(
        [Parameter(Mandatory=$True, Position=0, ParameterSetName="Tags")]
        [String[]]$Tags = @(),

        [Parameter(Mandatory=$True, Position=1, ParameterSetName="Tags")]
        [Parameter(Mandatory=$True, Position=0, ParameterSetName="All")]
        [ScriptBlock]$Script
    )
    $Name = $MyInvocation.InvocationName

    $Script:GherkinHooks.${Name} += @( @{ Tags = $Tags; Script = $Script } )
}

Set-Alias BeforeAllFeatures Hook
Set-Alias BeforeFeature Hook
Set-Alias BeforeScenario Hook
Set-Alias BeforeStep Hook

Set-Alias AfterAllFeatures Hook
Set-Alias AfterFeature Hook
Set-Alias AfterScenario Hook
Set-Alias AfterStep Hook