Какие командлеты используют интерфейс iHostuisupportsmultiPlechoiceselechoiceselechoiceLection, чтобы подсказать выбор?

StackOverflow https://stackoverflow.com/questions/3664061

  •  01-10-2019
  •  | 
  •  

Вопрос

Я не помню, как никогда не повлиял на несколько выборов до PowerShell, но я видел несколько примеров хозяев, реализующих этот интерфейс. К сожалению, это единственные ссылки, которые я видел для интерфейса. Я никогда не видел «Вот как проверить, что вы его правильно реализуете».

Это было полезно?

Решение

Пожалуйста, не обращайте внимания на мой первый ответ; Это совсем не ответ, как я вижу сейчас. И спасибо за действительно интересный вопрос.

Я до сих пор не знаю командлеты, которые используют этот интерфейс. Но мы можем использовать его самостоятельно из сценариев. Давайте изменим упомянутое Get-Choice.ps1 и вызовите новый Get-Choice2.ps1:

<#
.SYNOPSIS
    Displays PowerShell style menu and gets user choices

.DESCRIPTION
    *) Returns choice indexes.
    *) Choice keys are indicated by '&' in menu items.
    *) Help strings can be empty or nulls (items are used themselves).
#>

param
(
    # Menu caption
    [string]$Caption = 'Confirm',
    # Menu message
    [string]$Message = 'Are you sure you want to continue?',
    # Choice info pairs: item1, help1, item2, help2, ...
    [string[]]$Choices = ('&Yes', 'Continue', '&No', 'Stop'),
    # Default choice indexes (i.e. selected on [Enter])
    [int[]]$DefaultChoice = @(0)
)
if ($args) { throw "Unknown parameters: $args" }
if ($Choices.Count % 2) { throw "Choice count must be even." }

$descriptions = @()
for($i = 0; $i -lt $Choices.Count; $i += 2) {
    $c = [System.Management.Automation.Host.ChoiceDescription]$Choices[$i]
    $c.HelpMessage = $Choices[$i + 1]
    if (!$c.HelpMessage) {
        $c.HelpMessage = $Choices[$i].Replace('&', '')
    }
    $descriptions += $c
}

$Host.UI.PromptForChoice($Caption, $Message, [System.Management.Automation.Host.ChoiceDescription[]]$descriptions, $DefaultChoice)

Теперь мы тестируем это:

Get-Choice2 'Title' 'Message' -DefaultChoice 0, 1, 2 -Choices @(
    'Choice &1', 'This is choice 1'
    'Choice &2', ''
    'Choice &3', ''
    'Choice &4', ''
    'Choice &5', ''
    'Choice &6', ''
    'Choice &7', ''
    'Choice &8', ''
    'Choice &9', ''
    'Choice &0', ''
)

Он печатает 10 вариантов, первые 3 выделены (в хосте консоли), а подсказки:

0> Test-Get-Choice2.ps1
Title
Message
[1] Choice 1
[2] Choice 2
[3] Choice 3
[4] Choice 4
[5] Choice 5
[6] Choice 6
[7] Choice 7
[8] Choice 8
[9] Choice 9
[0] Choice 0
[?] Help
(default choices are 1,2,3)
Choice[0]:

Если мы нажмем Enter Сразу же вывод - это индексы по умолчанию 3: 0, 1, 2. Если мы введем, например: 5 + Enter + 3 + Enter + 1 + Enter + Enter Затем выход 4, 2, 0.

Оно работает. PowerShell ISE также поддерживает это, но UI может быть чем-то лучше в версии GUI, возможно.

Другие советы

Например: команда Remove-Item C:\TEMP\Test предложит вам выбрать:

Confirm
The item at C:\TEMP\Test has children and the Recurse parameter was not specified. If you continue, all children will be removed with the item. Are you sure you want to continue?
[Y] Yes  [A] Yes to All  [N] No  [L] No to All  [S] Suspend  [?] Help (default is "Y"):

Или вы можете создать свой собственный вызов, используя этот скрипт (или его идею):Get-Choice.ps1 - отображает меню стиль PowerShell и получает выбор пользователя

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top