function Invoke-Hook() { param( [string] $Name, [scriptblock] $Fallback ) if ($Fallback) { $scriptBlock = $Fallback; } else { $scriptBlock = { }; } if (Get-Command "$Name" -ErrorAction SilentlyContinue) { $parameters = { fallback = $scriptBlock }; Write-Host "Running Hook ``$Name``"; & "$Name" @parameters; } elseif ($Fallback) { Write-Host "Running Default of Hook ``$Name``"; & $scriptBlock; } else { Write-Host "Hook ``$Name``"; } }