Пользовательский ввод PowerShell, Меню, Подменю, - PullRequest
0 голосов
/ 11 января 2019

Я пытаюсь создать интерактивный скрипт PowerShell, который будет выполнять следующие действия:

Меню 1 - Запрашивать у пользователя путь к файлу. Затем, основываясь на пути к файлу, я попаду в каталог

Меню 2 - Как только пользовательский ввод будет сделан, у меня будет второе меню, которое предложит пользователю выбрать файл для анализа

Один пользователь выбирает опцию, он будет выводить файл и затем перезапускать из меню 2

Я не понимаю, как отобразить только первое меню, затем, как только пользовательский ввод будет отправлен, перейдите во второе меню, а после того, как пользователь выберет и файл будет проанализирован, вернитесь во второе меню до "Q".

$Filepath = Read-Host -Prompt 'Please Enter File Path'
do
cd $FilePath

function Show-Menu {
    Clear-Host

    Write-Host "1: Press '1' for parsing test.txt"
    Write-Host "2: Press '2' for parsing test2.txt"
    Write-Host "3: Press '3' for parsing test3.txt"
    Write-Host "Q: Press 'Q' to quit."
}

do {
    Show-Menu $selection = Read-Host "Please make a selection"
    switch ($selection) {
        '1' {
            'You chose option #1'
            Clear-Host
            Import-Csv txt.file -Delimiter '|' -Header '1' ,'2' | Out-GridView
        }
    }
    pause
} until ($selection -eq 'q')

Ответы [ 2 ]

0 голосов
/ 11 января 2019

Вместо того, чтобы использовать цикл, другой вариант - вызвать саму функцию 'menu', чтобы снова показать меню после того, как вы выполнили синтаксический анализ.

Вы также можете использовать Host.ChoiceDescription, чтобы построить и показать меню для вас.

$Filepath = Read-Host -Prompt 'Please Enter File Path'
Set-Location $FilePath

function Get-Selection {
    $Title = "Please make a selection"
    $Message = "Select File for parsing"
    $Option1 = New-Object System.Management.Automation.Host.ChoiceDescription "test.txt"
    $Option2 = New-Object System.Management.Automation.Host.ChoiceDescription "test2.txt"
    $Option3 = New-Object System.Management.Automation.Host.ChoiceDescription "test3.txt"
    $Option4 = New-Object System.Management.Automation.Host.ChoiceDescription "Quit"
    $Options = [System.Management.Automation.Host.ChoiceDescription[]]($Option1,$Option2,$Option3,$Option4)

    $host.ui.PromptForChoice($title, $message, $options, 0)
}

function Show-Menu {
    switch (Get-Selection) {
        0 {
            Write-Host 'You chose option #1'
            Clear-Host
            Import-Csv txt.file -Delimiter '|' -Header '1' ,'2' | Out-GridView
            Show-Menu # Show menu for next choice
        }
        1 {
            Write-Host 'You chose option #2'
            Clear-Host
            # Import-Csv
            Show-Menu # Show menu for next choice
        }
        2 {
            Write-Host 'You chose option #2'
            Clear-Host
            # Import-Csv
            Show-Menu # Show menu for next choice
        }
        3 {
            Write-Host 'Quit'
        }
    }
}

Show-Menu # Load menu when script is run
0 голосов
/ 11 января 2019

В вашем сообщении нет двух меню. У вас есть только один. Если вы не говорите, что рассматриваете этот Read-Host меню.

Это то, что вы пытаетесь достичь?

Clear-Host

$Filepath = Read-Host -Prompt "`nPlease Enter File Path"
Push-Location -Path $Filepath


$MenuOptions = @'
"Press '1' for parsing test1.txt"
"Press '2' for parsing test2.txt"
"Press '3' for parsing test3.txt"
"Press 'Q' to quit."
'@

"`n$MenuOptions"

while(($selection  = Read-Host -Prompt "`nSelect a option") -ne 'Q')
{
    Clear-Host

    "`n$MenuOptions"

    switch( $selection )
    {
        1 { 'Code for doing option 1 stuff' }
        2 { 'Code for doing option 2 stuff' }
        3 { 'Code for doing option 3 stuff' }
        Q { 'Quit' }
        default {'Invalid entry'}
    }

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