我想创建一个带有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')
答案 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
变量。