在Powershell中将HashTable用于具有多个值的键

时间:2019-10-03 16:16:41

标签: powershell hashtable

我正在尝试找到一种方法,使键具有从文本文件中读取的多个值。我几乎已经弄清楚了,但仍然停留在如何使用数组值创建键上。我从一个格式为

的文本文件中读取了该文件
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 个答案:

答案 0 :(得分:1)

您使这种方式过于复杂。这样的东西就足够了:

$hash = @{}
Get-Content 'C:\serversjobs.txt' | ForEach-Object {
    $line = $_.Replace(':', '').Trim()
    if ($_ -like '*:*') {
        $server = $line
        $hash[$server] = @()
    } elseif ($line) {
        $hash[$server] += $line
    }
}