Out-GridView
но предпочтительным выходом является фильтрация до тех пор, пока не останется один
В зависимости от того, что бегущий пользователь выберет для фильтров, это может быть карательным подходом / излишне сложным. Если вам нужен только один результат, как насчет того, чтобы вместо этого мы использовали что-то вроде Out-GridView
, чтобы позволить пользователю выбрать один результат из выбранного фильтра.
$filter = Read-Host -Prompt "Please filter to find the correct resource group"
$RGName = get-azurermresourcegroup |
Where-Object { $_.ResourceGroupName -match $filter } |
Out-GridView -OutputMode Single
$RGName.resourcegroupname
Вы могли бы использовать -PassThru
, но это допускает несколько вариантов выбора. -OutputMode Single
. Так что это все равно может сделать огромный выбор, если $filter
будет слишком расплывчатым, но это простой способ гарантировать, что вы получите один результат. Еще одно предупреждение: пользователь может нажать «Отмена». Так что вам может понадобиться логика цикла: do{..}until{}
. Это зависит от того, насколько устойчивым вы хотите сделать этот процесс.
Choice
Если Out-GridView
не ваша скорость. Другой вариант - сделать систему динамического выбора, используя $host.ui.PromptForChoice
. Ниже приведен пример, который позволяет пользователям выбирать подпапку из коллекции.
$possibilities = Get-ChildItem C:\temp -Directory
If($possibilities.Count -gt 1){
$title = "Folder Selection"
$message = "Which folder would you like to use?"
# Build the choices menu
$choices = @()
For($index = 0; $index -lt $possibilities.Count; $index++){
$choices += New-Object System.Management.Automation.Host.ChoiceDescription ($possibilities[$index]).Name
}
$options = [System.Management.Automation.Host.ChoiceDescription[]]$choices
$result = $host.ui.PromptForChoice($title, $message, $options, 0)
$selection = $possibilities[$result]
}
$selection
Вы должны быть в состоянии адаптировать это в своем коде так же, как я предложил с Out-GridView
. Будьте осторожны, хотя об этом подходе. Слишком много опций загромождет экран.