Создание динамического меню в Powershell - PullRequest
1 голос
/ 14 марта 2019

Я пытаюсь создать динамическое меню терминала, из которого пользователь может выбирать в Powershell. На данный момент у меня есть код для отображения меню, но не как сохранить правильное значение в переменной:

$ouCounter=1
Write-Host "`n Please Select OU"
foreach ($ouEntry in ((Get-ADOrganizationalUnit -LDAPFilter '(name=*)' - 
SearchBase 'OU=Resources,DC=dept,DC=ad,DC=domain,DC=tld' -SearchScope OneLevel).Name)){ 
Write-Host $("   "+$ouCounter+".`t"+$ouEntry) 
$ouCounter++ 
} 
[int]$menuSelection = Read-Host "`n Enter Option Number"

Это даст:

 Please Select OU 

   1.   HR 
   2.   Accounting 
   3.   Manufacturing 
   4.   PR 
   5.   Executives 

 Enter Option Number:

Конечно, когда я выбираю 4, например, $menuSelection возвращает 4, а не PR.

И поскольку я не знаю, каким будет содержимое списка, поскольку новые организационные единицы AD могут быть добавлены в любое время, я не уверен, как это сделать.

Я также хотел бы выяснить, как добавить некоторую логику, которая будет отображаться только за исключением чисел в первом столбце, например, если я введу 6, мне будет предложено повторить попытку, пока не будет получено число, которое было в списке. Но опять же это число будет меняться в зависимости от количества присутствующих подразделений.

Ответы [ 3 ]

0 голосов
/ 14 марта 2019

Как насчет просто сделать это ...

Clear-Host

$ouCounter = 1
$MenuArray = @()

Write-Host "`n Please Select OU"

$DomainName = ($env:USERDNSDOMAIN).split('.')[0]
$Tld = ($env:USERDNSDOMAIN).split('.')[1]


foreach ($ouEntry in ((Get-ADOrganizationalUnit -LDAPFilter '(name=*)' -SearchBase "DC=$DomainName,DC=$Tld" -SearchScope OneLevel).Name))
{ 
    $("   "+$ouCounter+".`t"+$ouEntry) 
    $ouCounter++ 
    $MenuArray += ,$ouEntry
}

do
{ [int]$menuSelection = Read-Host "`n Enter Option Number" }
until ([int]$menuSelection -le $ouCounter -1)

$MenuArray[$menuSelection -1]


# Results

 Please Select OU
   1.   Domain Controllers
   2.   EnterpriseServiceAccounts
   ...
   8.   FCI Server Security Groups

 Enter Option Number: 9

 Enter Option Number: 10

 Enter Option Number: 11

 Enter Option Number: 12

 Enter Option Number: 1
Domain Controllers
0 голосов
/ 14 марта 2019

Пожалуйста, обратитесь https://www.business.com/articles/powershell-interactive-menu/

function Menu
{
     cls

     Write-Host "================ UNIT====="
     Write-Host "HR"
     Write-Host "Account"
     Write-Host "=PR="
     Write-Host "EXIT"
}

#Loop

do
{
     Menu
     #
       $Value = Read-Host "UNIT selection"
     switch ($Value)
     {
           'HR' {

                Write-Host "Human resource"
                #Execute the Command 
           } 'Account'

                { 

                #Execute command
           } 'PR' {

                #EXECUTE Command
                echo "test pr"
           } 'q' {
           cls
                return
           }
     }
     Sleep 2
     pause
}
until ($input -eq 'q')

Выполнение:

================ UNIT ===== Счет HR =PR = ВЫБОР БЛОКА ВЫБОР: HR человеческий ресурс Нажмите Enter, чтобы продолжить ...:

0 голосов
/ 14 марта 2019

вот один из способов генерирования переменного количества элементов в меню.[ ухмылка ], поскольку у меня нет доступа к рекламным материалам, я использовал свои локальные группы.

$LocalGroupList = Get-LocalGroup -Name 'a*', 'h*', 'p*', 'u*'

foreach ($MenuItem in $LocalGroupList)
    {
    '{0} - {1}' -f ($LocalGroupList.IndexOf($MenuItem) + 1), $MenuItem.Name
    }

$Choice = ''
while ([string]::IsNullOrEmpty($Choice))
    {
    Write-Host
    $Choice = Read-Host 'Please choose an item by number '
    if ($Choice -notin 1..$LocalGroupList.Count)
        {
        [console]::Beep(1000, 300)
        Write-Warning ''
        Write-Warning ('    Your choice [ {0} ] is not valid.' -f $Choice)
        Write-Warning ('        The valid choices are 1 thru {0}.' -f $LocalGroupList.Count)
        Write-Warning '        Please try again ...'
        pause

        $Choice = ''
        }
    }

''
'You chose {0}' -f $LocalGroupList[$Choice - 1]

вывод ...

1 - Administrators
2 - HomeUsers
3 - Homonymic_Tuu
4 - Performance Log Users
5 - Performance Monitor Users
6 - Power Users
7 - Users

Please choose an item by number : 44
WARNING: 
WARNING:     Your choice [ 44 ] is not valid.
WARNING:         The valid choices are 1 thru 7.
WARNING:         Please try again ...
Press Enter to continue...: 

Please choose an item by number : 2

You chose HomeUsers
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...