Qu'est-ce cmdlets utiliser l'interface IHostUISupportsMultipleChoiceSelection pour demander des choix?

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

  •  01-10-2019
  •  | 
  •  

Question

Je ne me souviens pas avoir été invité à plusieurs sélections avant dans PowerShell, mais je l'ai vu plusieurs exemples d'hôtes implémentant cette interface. Malheureusement, ce sont les seules références que je l'ai vu à l'interface. Je ne l'ai jamais vu « voici comment test que vous implémentez correctement ».

Était-ce utile?

La solution

S'il vous plaît, ne pas tenir compte de ma première réponse; il n'est pas une réponse du tout, comme je peux voir maintenant. Et je vous remercie pour une question très intéressante.

Je ne sais toujours pas cmdlets qui utilisent cette interface. Mais nous pouvons l'utiliser sur notre propre à partir de scripts. Modifions le mentionné Get-Choice.ps1 et appellent le nouveau 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)

Maintenant, nous tester:

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', ''
)

Il imprime 10 choix, les 3 premiers sont mises en évidence (dans l'hôte de la console), et invites:

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]:

Si on appuie sur Enter immédiatement la sortie par défaut est 3 index: 0, 1, 2. Si nous tapons, par exemple:. 5 + Enter + 3 + Enter + 1 + Enter + Enter alors la sortie est 4, 2, 0

Il fonctionne. PowerShell ISE prend également en charge cela, mais l'interface utilisateur pourrait être quelque chose de mieux dans la version GUI, peut-être.

Autres conseils

Par exemple: la commande Remove-Item C:\TEMP\Test invites vous de choisir:

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"):

Ou vous pouvez construire votre propre appel à l'aide de ce script (ou son idée): Get-Choice.ps1 - Affiche le menu de style PowerShell et obtient un choix de l'utilisateur

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top