использование HashTable для ключа с несколькими значениями в Powershell - PullRequest
1 голос
/ 03 октября 2019

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

Server1:
job1
job2
job3
Server2:
Job1
Server3:
Job1
Job2

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

$hash = @{}
$content = Get-Content "C:\serversjobs.txt"
for ($i = 0; $i -lt $content.Count; $i++) {
    $line = $content[$i]
    if (($line -like '*:*') -and ($i + 1 -lt $content.Count)) {
        $nextLine = $content[$i+1]
        if ($nextLine -notlike '*:*') {
            $Server = $line.Replace(":", "").Trim().ToString()
            $hash.Server = @()
        }
    } elseif ($line -notlike '*:*') {
        $hash.Server += $line
    }
}
Write-Host $hash.Server

Всякий раз, когда это выводит, он просто выводит все задания. Я не уверен, куда идти отсюда. Я также смотрю в будущее на следующую строку, потому что некоторые серверы не имеют каких-либо заданий, поэтому их не следует включать. Оператор for в значительной степени говорит, что если в следующей строке также есть «:», то в этой текущей строке нет подключенных заданий, поэтому пропустите.

1 Ответ

1 голос
/ 03 октября 2019

Ты делаешь это слишком сложным. Что-то вроде этого должно быть достаточно:

$hash = @{}
Get-Content 'C:\serversjobs.txt' | ForEach-Object {
    $line = $_.Replace(':', '').Trim()
    if ($_ -like '*:*') {
        $server = $line
        $hash[$server] = @()
    } elseif ($line) {
        $hash[$server] += $line
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...