powershell active-directory powershell-v4.0

powershell - Seleccionar la opción de Array



active-directory powershell-v4.0 (2)

Estoy trabajando en un proyecto paralelo y para facilitar la administración, ya que casi todos los nombres de servidor tienen 15 caracteres de largo. Empecé a buscar una opción de administración de RDP pero ninguna que me gustaba; así que comencé a escribir uno y solo tengo un problema, ¿qué debo hacer para gestionarlo si el usuario no escribe lo suficiente para una búsqueda, de modo que dos servidores coincidan con la consulta? Creo que tendré que ponerlo en una matriz y luego dejar que seleccionen el servidor al que se refieren. Esto es lo que tengo hasta ahora

function Connect-RDP { param ( [Parameter(Mandatory = $true)] $ComputerName, [System.Management.Automation.Credential()] $Credential ) # take each computername and process it individually $ComputerName | ForEach-Object{ Try { $Computer = $_ $ConnectionDNS = Get-ADComputer -server "DomainController:1234" -ldapfilter "(name=$computer)" -ErrorAction Stop | Select-Object -ExpandProperty DNSHostName $ConnectionSearchDNS = Get-ADComputer -server "DomainController:1234" -ldapfilter "(name=*$computer*)" | Select -Exp DNSHostName Write-host $ConnectionDNS Write-host $ConnectionSearchDNS if ($ConnectionDNS){ #mstsc.exe /v ($ConnectionDNS) /f }Else{ #mstsc.exe /v ($ConnectionSearchDNS) /f } } catch { Write-Host "Could not locate computer ''$Computer'' in AD." -ForegroundColor Red } } }

Básicamente estoy buscando una forma de administrar si un usuario escribe server1

que preguntará si desea conectarse a Server10 o Server11 ya que ambos coinciden con el filtro.


Estoy seguro de que mjolinor lo tiene genial. Solo quería mostrar otro enfoque usando PromptForChoice . En el siguiente ejemplo, tomamos los resultados de Get-ChildItem y si hay más de uno, creamos una colección de opciones. El usuario seleccionaría uno y luego ese objeto pasaría al siguiente paso.

$selection = Get-ChildItem C:/temp -Directory If($selection.Count -gt 1){ $title = "Folder Selection" $message = "Which folder would you like to use?" # Build the choices menu $choices = @() For($index = 0; $index -lt $selection.Count; $index++){ $choices += New-Object System.Management.Automation.Host.ChoiceDescription ($selection[$index]).Name, ($selection[$index]).FullName } $options = [System.Management.Automation.Host.ChoiceDescription[]]$choices $result = $host.ui.PromptForChoice($title, $message, $options, 0) $selection = $selection[$result] } $selection

-Directory requiere PowerShell v3 pero estás usando 4 para que estés bien.

En ISE se vería así:

En la consola estándar, verías algo como esto

A partir de ahora, deberá escribir el nombre de la carpeta completa para seleccionar la opción en el aviso. Es difícil obtener un valor único en múltiples opciones para el atajo también llamado tecla aceleradora. ¡Piense en ello como una forma de asegurarse de que tomen la decisión correcta!


Otra opción para presentar opciones al usuario es Out-GridView , con el -OutPutMode .

Tomando prestado del ejemplo de Matt:

$selection = Get-ChildItem C:/temp -Directory If($selection.Count -gt 1){ $IDX = 0 $(foreach ($item in $selection){ $item | select @{l=''IDX'';e={$IDX}},Name $IDX++}) | Out-GridView -Title ''Select one or more folders to use'' -OutputMode Multiple | foreach { $selection[$_.IDX] } } else {$Selection}

Este ejemplo permite la selección de varias carpetas, pero puede limitarlas a una única carpeta simplemente cambiando -OutPutMode a Single