根据变量在powershell中创建show-menu

时间:2017-09-08 14:12:48

标签: powershell menu

我想创建一个带有show-menu的菜单,该菜单取决于计算机上的内容。

我想在菜单中列出c:\ users \中可用的用户名(基于文件夹名称)。

例如: 在c:\ users中 有文件夹nammed:

homer.simpson
lisa.simpson
bart.simpson

并通过show-menu要求用户通过为lisa.simpson等输入1 for homer.simpson 2来选择其中一个。

我该怎么办?

提前谢谢!

编辑:代码

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

1 个答案:

答案 0 :(得分:1)

试试这个(基于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'

根据评论,使用(Get-ChildItem C:\Users).Name获取用户文件夹名称列表。然后将这些循环传送到ForEach-Object循环,首先将计数器变量$i初始化为1。

在循环中,它打印出每个文件的名称(现在表示为$_,它是管道中当前项的自动变量),并使用计数器变量显示编号的选项。它还将每个数字/名称对放在名为$Menu的哈希表中,然后在通过Read-Host输入选择时将其用作查找。

所选选项将返回$UserSelection变量。