2017-09-08 2 views
2

Je veux créer un menu avec le menu de show qui dépendra de ce qui est présent sur l'ordinateur.Créer un show-menu en PowerShell en fonction des variables

Je souhaite répertorier dans le menu les noms d'utilisateur disponibles sur c: \ users \ (en fonction des noms de dossiers).

Par exemple: dans c: \ users il y a dossier nammed:

homer.simpson 
lisa.simpson 
bart.simpson 

et avec show menu demander à l'utilisateur de choisir l'un d'entre eux en tapant 1 pour 2 homer.simpson pour lisa. simpson etc.

Comment puis-je le faire?

Merci d'avance!

EDIT: Code

$users = Get-ChildItem "$env:SystemDrive\Users"| ForEach-Object { $_.Name } 

foreach ($user in $user) { 

$user 
$num++ 

New-Variable -Name "a$num" -Value $user 
#Get-Variable -Name "$user$i" 

} 



function Show-Menu 
{ 
    param (
      [string]$Title = 'Please select an user' 
    ) 
    cls 
    Write-Host "================ $Title ================" 

    Write-Host "1: $a1" 
    Write-Host "2: $a2" 
    Write-Host "3: $a3" 
    Write-Host "Q: $a4" 
} 


do 
{ 
    Show-Menu 
    $input = Read-Host "Please make a selection" 
    switch ($input) 
    { 
      '1' { 
       cls 
       'You chose option #1' 
      } '2' { 
       cls 
       'You chose option #2' 
      } '3' { 
       cls 
       'You chose option #3' 
      } 'q' { 
       return 
      } 
    } 
    pause 
} 
until ($input -eq 'q') 
+0

Veuillez poster tout code que vous avez essayé. Je crois que vous obtenez le 'show-menu' de [ce site] (https://4sysops.com/archives/how-to-build-an-interactive-menu-with-powershell/). Afin d'obtenir les utilisateurs dans ce dossier, vous pouvez faire '(Get-ChildItem C: \ Users) .Name' – cet51

+0

Hey Cory, Merci pour votre réponse! Oui c'est vrai haha! Je vais afficher le code – xsouxsou

Répondre

1

Essayez cette (basé sur Show-Menu by Adam Bertram):

function Show-Menu 
{ 
    param (
     [string]$Title = 'My Menu' 
    ) 
    Clear-Host 
    Write-Host "================ $Title ================" 

    $Menu = @{} 

    (Get-ChildItem C:\Users).Name | ForEach-Object -Begin {$i = 1} { 

     Write-Host "$_`: Press '$i' for this option." 
     $Menu.add("$i",$_) 
     $i++ 
    } 

    Write-Host "Q: Press 'Q' to quit." 

    $Selection = Read-Host "Please make a selection" 

    if ($Selection -eq 'Q') { Return } Else { $Menu.$Selection } 

} 

$UserSelection = Show-Menu -Title 'Local Users' 

par les commentaires, utilise (Get-ChildItem C:\Users).Name pour obtenir la liste des noms de dossier utilisateur. Ceux-ci sont ensuite canalisée vers une boucle ForEach-Object qui commence par initilizing une variable compteur $i comme 1.

Dans la boucle, il imprime le nom de chaque fichier (maintenant représenté comme $_ qui est la variable automatique pour l'élément en cours dans la pipeline) et utilise la variable compteur pour afficher les options numérotées. Il place également chaque couple nombre/nom dans une table de hachage nommée $Menu qui est ensuite utilisée comme recherche lorsque la sélection est entrée via Read-Host. L'option sélectionnée est renvoyée à la variable $UserSelection.

+0

Hey Mark! Merci beaucoup, c'est exactement ce que je cherchais! Merci! Axel – xsouxsou

+0

Merci, pouvez-vous m'expliquer comment puis-je obtenir la valeur de l'utilisateur sélectionné? – xsouxsou

+0

J'ai modifié ma réponse. –