Lo cmdlets utilizar la interfaz IHostUISupportsMultipleChoiceSelection para solicitar opciones?

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

  •  01-10-2019
  •  | 
  •  

Pregunta

No recuerdo cada vez que se le solicite para múltiples selecciones antes de PowerShell, pero he visto varios ejemplos de huéspedes de ejecución de esta interfaz. Por desgracia, esas son las únicas referencias que he visto a la interfaz. Nunca he visto "aquí está la manera de prueba que va a implementar de manera correcta".

¿Fue útil?

Solución

Por favor, hacer caso omiso de mi primera respuesta; no es una respuesta en absoluto, lo que puedo ver ahora. Y gracias por una pregunta muy interesante.

Yo todavía no sé cmdlets que utilizan esa interfaz. Pero podemos usarlo en nuestra propia desde scripts. Vamos a modificar el mencionado Get-Choice.ps1 y llamar al nuevo 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)

Ahora que probarlo:

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

Imprime 10 opciones, se destacan los primeros 3 (en el huésped consola), e indicaciones:

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 pulsamos Enter inmediatamente la salida es el valor predeterminado 3 índices: 0, 1, 2. Si nos tipo, por ejemplo:. 5 + Enter + 3 + Enter + 1 + Enter + Enter entonces la salida es de 4, 2, 0

Funciona. PowerShell ISE también es compatible con esto, pero la interfaz de usuario podría ser algo mejor en la versión de interfaz gráfica de usuario, tal vez.

Otros consejos

Por ejemplo: los símbolos del sistema Remove-Item C:\TEMP\Test que usted elija:

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

O usted puede construir su propia llamada utilizando esta secuencia de comandos (o su idea): Get-Choice.ps1 - menú de estilo PowerShell muestra y obtiene una opción de usuario

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top