Lo cmdlets utilizar la interfaz IHostUISupportsMultipleChoiceSelection para solicitar opciones?
-
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".
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