Сохранить значение выделения в переменной и передать его другой функции в PowerShell? - PullRequest
0 голосов
/ 13 марта 2020

У меня есть вход от одной функции ниже:

function Start-MenuList 
{
    $counter = 0

    "Below are boxes`n"

     Get-Content -Path 'abc.txt' | 
     ForEach {
        $counter++
        "$counter : Press $counter to select $(($PSItem -split '=')[0]) : $(($PSItem -split '=')[1])"
     }

     Read-Host -Prompt "`nPlease enter a selection"
}

Clear-Host 
Start-MenuList

    1. Press 1 to select abc : abcde1234
    2. Press 2 to select def : abcde5678
    3. Press 3 to select chi : abcde9090
    Please make a selection:

Здесь, если я выбираю 1 в качестве входа для выбора, тогда я хочу сохранить значение, например, если я выберу 1, тогда должно сохраниться "ab c "и" abcdef1234 "в некоторых переменных и передайте их другой функции и отобразите, что мы имеем в этих двух переменных

func1 env boxname

файл ab c .txt

abc=abcde0001
def=abcedf002
ghj=abcefgh003

Ответы [ 2 ]

0 голосов
/ 13 марта 2020

Я вижу, что это дополнительный вопрос из предыдущего Q & A, который вы отправили. Это действительно так просто.

Использование вашего файла из предыдущего Q & A и мой ответ вам .

function Start-MenuList 
{
    $counter = 0

    "Below are boxes`n"

     Get-Content -Path 'D:\temp\abc.txt' | 
     ForEach {
        $counter++
        "$counter : Press $counter to select $(($PSItem -split '=')[0]) : $(($PSItem -split '=')[1])"
     }

     ($UserChoice = Read-Host -Prompt "`nPlease enter a selection")
}

Clear-Host 
Start-MenuList

<#
Below are boxes

1 : Press 1 to select a : abcdef123
2 : Press 2 to select b : ngh567
3 : Press 3 to select c : defh123

Please enter a selection: 1
1
#>

Конечно, вы можете изменить код так, чтобы он захватывал любую часть отображаемого пункта меню для любого необходимого вам использования, используя If / then, try / catch, switch Statement et c.

Пример:

function Start-MenuList 
{
    $counter = 0

    "Below are boxes`n"

     Get-Content -Path 'D:\temp\abc.txt' | 
     ForEach {
        $counter++
        "$counter : Press $counter to select $(($PSItem -split '=')[0]) : $(($PSItem -split '=')[1])"
     }

     $UserChoice = Read-Host -Prompt "`nPlease enter a selection"

     switch ($UserChoice) 
         { 
             1 {'abcde1234'} 
             2 {'abcde5678'} 
             3 {'abcde9090'} 
             default {Write-Warning -Message 'No select was made.'}
         }
}

Clear-Host 
Start-MenuList


<#
# Results

Below are boxes

1 : Press 1 to select a : abcdef123
2 : Press 2 to select b : ngh567
3 : Press 3 to select c : defh123

Please enter a selection: 1
abcde1234
#>

Теперь, конечно, это жестко закодированный ответ, и динамически, это может быть что-то вроде этого .

function Start-MenuList 
{
    $counter = 0

    "Below are boxes`n"

     Get-Content -Path 'D:\temp\abc.txt' | 
     ForEach {
        $counter++
        "$counter : Press $counter to select $(($PSItem -split '=')[0]) : $(($PSItem -split '=')[1])"
     }

     $UserChoice = Read-Host -Prompt "`nPlease enter a selection"

     switch ($UserChoice) 
         { 
             $UserChoice {"The user selected $UserChoice"} 
             default {Write-Warning -Message 'No select was made.'}
         }
}

Clear-Host 
Start-MenuList

<#
Below are boxes

1 : Press 1 to select a : abcdef123
2 : Press 2 to select b : ngh567
3 : Press 3 to select c : defh123

Please enter a selection: 3
The user selected 3
#>

Если вам нужна строка из файла / меню, вы все равно можете использовать переключатель с массивом из файла

function Start-MenuList 
{
    $counter = 0

    "Below are boxes`n"

     Get-Content -Path 'D:\temp\abc.txt' | 
     ForEach {
        $counter++
        "$counter : Press $counter to select $(($PSItem -split '=')[0]) : $(($PSItem -split '=')[1])"
     }

     $UserChoice = (Read-Host -Prompt "`nPlease enter a selection") - 1

     $MenuArray = (Get-Content -Path 'D:\temp\abc.txt') -replace '.*='
     switch ($MenuArray[$UserChoice]) 
         { 
             $MenuArray[$UserChoice] {"The user selected $($MenuArray[$UserChoice])."} 
             default {Write-Warning -Message 'No select was made.'}
         }
}


Clear-Host 
Start-MenuList

<#
Below are boxes

1 : Press 1 to select a : abcdef123
2 : Press 2 to select b : ngh567
3 : Press 3 to select c : defh123

Please enter a selection: 1
The user selected abcdef123.

 Start-MenuList
Below are boxes

1 : Press 1 to select a : abcdef123
2 : Press 2 to select b : ngh567
3 : Press 3 to select c : defh123

Please enter a selection: 2
The user selected ngh567.

 Start-MenuList
Below are boxes

1 : Press 1 to select a : abcdef123
2 : Press 2 to select b : ngh567
3 : Press 3 to select c : defh123

Please enter a selection: 3
The user selected defh123.
#>
0 голосов
/ 13 марта 2020

Похоже, что вы делаете то, что вы после:

function Start-MenuList 
{
    $counter = 0

    "Below are boxes`n"

     Get-Content -Path 'C:\temp\abc.txt' | 
     ForEach {
        $counter++
        "$counter : Press $counter to select $(($PSItem -split '=')[0]) : $(($PSItem -split '=')[1])"
     }

     $s = Read-Host -Prompt "`nPlease enter a selection"

     $l = Get-Content -Path 'C:\temp\abc.txt' | Select-Object -Index ($s-1)
     $c1 = ($l -split '=')[0]
     $c2 = ($l -split '=')[1]

     #Write-Host $c1
     #Write-Host $c2
}

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