Цикл Powershell до вывода одной строкой - PullRequest
0 голосов
/ 06 ноября 2018

Чего я пытаюсь добиться, так это того, что если выходные данные составляют одну строку и эта строка записывается в переменную. Вот код, который у меня есть сейчас:

Connect-AzureRmAccount
(get-azurermresourcegroup).ResourceGroupName 
$filter = Read-Host -Prompt "Please filter to find the correct resource group" 
$RGName = get-azurermresourcegroup | Where-Object { $_.ResourceGroupName -match $filter } 
$RGName.resourcegroupname

этот код фильтрует один раз, и после этого он записывает все строки друг под другом, так что результаты таковы:

ResourceGroup-Test
ResourceGroup-Test-1
ResourceGroup-Test-2 

но предпочтительным выходом является фильтрация до тех пор, пока не останется один

1 Ответ

0 голосов
/ 06 ноября 2018

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. Будьте осторожны, хотя об этом подходе. Слишком много опций загромождет экран.

...