Вложенный foreach l oop в powershell - PullRequest
1 голос
/ 06 марта 2020

Я пытаюсь прочитать значения из файла ab c .txt в функции ниже

ab c .txt

a=abcdef123
b=ngh567
c=defh123

Ниже приведена функция:

function List 
    {
        Write-Output "Below are the window boxes"
        $alph = @(get-content  -Path "abc.txt" | %{$_.split('=')[0]})
        $machinelist = @(get-content  -Path "abc.txt" | %{$_.split('=')[1]})
        $counter = 0
        foreach ($mac in $machinelist) {
        foreach ($env in $alph ) {

        {
              $counter++
        write-host ""$counter": Press '"$counter"' to select "$env": $mac"
        } 
      }
    }

Я хочу, чтобы ввод был похож на

     1: Press '1' to select a : abcdef123
     2: Press '2' to select b : ngh567
     3: Press '3' to select c : defh123
Please make a selection:

Я думаю, нам нужно использовать вложенный foreach, но я не уверен, что я делаю неправильно. Когда я делаю выбор, например, 1, я хочу прочитать значение как env и ma c

Ответы [ 2 ]

1 голос
/ 06 марта 2020

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

Вы также измените то, что вы сказали после и даже здесь вы не так ясны, как на другом сайте.

Вы все еще слишком усложняете этот вариант использования из-за кривой опыта. Мы все должны пройти через это, но решить это с помощью обзора ресурсов / обучения. Гадание просто приводит к разочарованию, ошибкам, плохому коду, вредным привычкам и т. Д. c. То, что я дал вам на других сайтах, примеры и тому подобное, должно было привести вас к вашим результатам, но здесь я приведу это.

Что касается вашего поста здесь. Вам не нужны вложенные циклы для этого основного меню консоли или всех этих дополнительных разделенных элементов. Вы можете сделать все это в соответствии с этим. Тем не менее, обратите внимание, что есть много способов сделать X или Y, это только один.

@'
a=abcdef123
b=ngh567
c=defh123
'@ | Out-File -FilePath 'D:\temp\abc.txt'
Get-Content -Path 'D:\temp\abc.txt'


function Start-MenuList 
{
    $counter = 0

    "Below are the window boxes`n"

     Get-Content -Path 'D:\temp\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 

<#
# Results

Below are the window 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: 
#>
0 голосов
/ 06 марта 2020

Нет необходимости в вложении петель в вашем случае; достаточно создать вложенный массив , то есть массив подмассивов из двух элементов каждый:

# Get the array of value pairs from the file.
# Each array element will be a subarray of 2 elements, namely
# the tokens before and after the "=".
$valuePairs = (Get-Content abc.txt).ForEach({ , ($_ -split '=') })

# Display the menu options, one for each pair.
$i = 0; $valuePairs.ForEach({ ++$i; "${i}: $($_[0]): $($_[1])" })

# Prompt the user to choose one option.
do {
  try { [int] $chosenNdx = Read-Host 'Enter an index to select' } catch { }
} while (-not ($chosenNdx -in 1..($valuePairs.Count)))

# Display the chosen value pair:
--$chosenNdx # Entry was 1-based, subtract 1.
"You chose: $($valuePairs[$chosenNdx][0]): $($valuePairs[$chosenNdx][1])" 

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