public/Get-Funnel.ps1
|
function Get-Funnel { <# .SYNOPSIS Lists named funnels or retrieves a specific funnel definition. .DESCRIPTION Returns funnel definitions from the user funnels directory ($HOME/.buckets-system/funnels/) and built-in funnels shipped with the module. User funnels with the same name override built-in ones. When no name is given, lists all funnels. .PARAMETER Name Optional funnel name to retrieve. Returns all funnels if omitted. .EXAMPLE Get-Funnel .EXAMPLE Get-Funnel -Name admins .EXAMPLE Get-Funnel -Name file-light #> [CmdletBinding()] param( [Parameter(Position = 0)][string]$Name ) if ($Name) { $def = Get-FunnelDefinition -Name $Name $out = [PSCustomObject]@{ Name = $Name; Transform = $def.Transform; Description = $def.Description } if ($def.AppliesTo) { $out | Add-Member -NotePropertyName AppliesTo -NotePropertyValue $def.AppliesTo } $out return } $seen = @{} $userDir = Join-Path (Get-BucketsSystemPath) "funnels" if (Test-Path $userDir) { foreach ($f in [System.IO.DirectoryInfo]::new($userDir).GetFiles("*.json")) { $fName = [System.IO.Path]::GetFileNameWithoutExtension($f.Name) $def = Get-FunnelDefinition -Name $fName $out = [PSCustomObject]@{ Name = $fName; Transform = $def.Transform; Description = $def.Description } if ($def.AppliesTo) { $out | Add-Member -NotePropertyName AppliesTo -NotePropertyValue $def.AppliesTo } $out $seen[$fName] = $true } } if (Test-Path $script:BuiltinFunnelsDir) { foreach ($f in [System.IO.DirectoryInfo]::new($script:BuiltinFunnelsDir).GetFiles("*.json")) { $fName = [System.IO.Path]::GetFileNameWithoutExtension($f.Name) if (-not $seen.ContainsKey($fName)) { $def = Get-FunnelDefinition -Name $fName $out = [PSCustomObject]@{ Name = $fName; Transform = $def.Transform; Description = $def.Description } if ($def.AppliesTo) { $out | Add-Member -NotePropertyName AppliesTo -NotePropertyValue $def.AppliesTo } $out } } } } |