получение пользовательского ввода от вложенной функции - PullRequest
0 голосов
/ 30 июня 2018

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

Set-Variable -Name setme -Option AllScope
$setme = "not set"
$nestedfunction = {
    Write-Output "inside the function `n"
    $setme = Read-Host "Enter Something"
    Write-Output "inside the function setme is: $setme `n"
}

Write-Output "Outisde call: $(&$nestedfunction)"
Write-Output "outside it is $setme"

Затем, когда я запускаю его, я получаю:

Enter Something: abc
Outisde call: inside the function 
 inside the function setme is: abc 

outside it is not set

Независимо от того, как я вложил функцию, она все равно заканчивается вот так

Set-Variable -Name setme -Option AllScope
$setme = "not set"

$parentfunction = {
    Write-Output "In parent `n"
    $childfunction = {

        Write-Output "inside the function `n"
        $setme = Read-Host "Enter Something"
        Write-Output "inside the function setme is: $setme `n"
    }
    Write-Output "Calling child function `n"
    &$childfunction
}

Write-Output "Outisde call: $(&$parentfunction)"
Write-Output "outside it is $setme"

Enter Something: abc
Outisde call: In parent 
 Calling child function 
 inside the function 
 inside the function setme is: abc 

outside it is not set

Конечная цель состоит в том, чтобы иметь возможность вызывать дочернюю функцию, чтобы она обрабатывала некоторые данные, и если эти данные являются недействительными, попросите пользователя повторно ввести данные. В моем реальном сценарии, в котором я хочу установить этот параметр, он даже не будет подтверждать вызовы Read-Host, а просто будет обходить их, выполняя все остальное. Кто-нибудь знает, чего мне не хватает?

Большое спасибо ~

спасибо @Рохин Сидхарт, который работал :)

1 Ответ

0 голосов
/ 30 июня 2018

Ну, во-первых, даже при том, что он работает по существу как функция, вы создали блок сценариев. Учитывая ваши требования, сделайте что-то вроде этого.

Function Get-UserInput ($message)
{
    $Userinput = Read-Host $message
    Return $Userinput
}

Function Run-ChildFunction ($input)
{
    #Insert processing code here
    if ("data is valid. Insert appropriate variables here")
    {
        Return $true
    }
    else
    {
        Return $false
    }
}

Function Run-ParentFunction
{
    $promptmessage = "Please enter Data"
    Do
    {
        $input = Get-UserInput -message "$promptmessage"
        $ChildReturnvalue = Run-ChildFunction -input $input

        if (!$ChildReturnvalue)
        {
            $promptmessage = "Data is invalid. Please check and re-enter"
        }
    }
    While (!$ChildReturnvalue)
}

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