Public/Invoke-PSRunSelector.ps1
function Invoke-PSRunSelector { [CmdletBinding()] param ( [Parameter(Mandatory = $true, ValueFromPipeline = $true)] [Object[]]$InputObject, [String]$NameProperty = 'Name', [String]$DescriptionProperty = 'Description', [String]$PreviewProperty = 'Preview', [ScriptBlock]$Expression, [Switch]$MultiSelection, [PowerShellRun.SelectorOption]$Option = $script:globalStore.defaultSelectorOption, [PowerShellRun.SelectorContext]$Context ) begin { $entries = [System.Collections.Generic.List[PowerShellRun.SelectorEntry]]::new() } process { foreach ($obj in $InputObject) { $entry = [PowerShellRun.SelectorEntry]::new() $entry.UserData = $obj if ($Expression) { $obj = $obj | ForEach-Object $Expression } if (($null -eq $obj.$NameProperty)) { if ($null -ne $obj) { $entry.Name = $obj.ToString() } } else { $entry.Name = $obj.$NameProperty } $entry.Description = $obj.$DescriptionProperty $entry.Preview = $obj.$PreviewProperty $entries.Add($entry) } } end { $mode = if ($MultiSelection) { [PowerShellRun.SelectorMode]::MultiSelection } else { [PowerShellRun.SelectorMode]::SingleSelection } $result = [PowerShellRun.Selector]::Open($entries, $mode, $Option, $Context) if ($result.MarkedEntries) { $result.MarkedEntries.UserData } else { $result.FocusedEntry.UserData } } } |