【问题标题】:using a HashTable for key with multiple values in Powershell在 Powershell 中使用 HashTable 作为具有多个值的键
【发布时间】:2019-10-03 16:16:41
【问题描述】:

我正在尝试找出一种方法来获得一个从文本文件中读取的具有多个值的键。我几乎想通了,但我坚持如何用数组值制作密钥。我从格式为

的文本文件中读取它 服务器1: 工作1 工作2 工作3 服务器2: 工作1 服务器3: 工作1 工作2

我设法拆分了行,但不知道如何使密钥不同,并且每个行都有一对作业。我的代码如下:

$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 语句几乎说如果下一行也有“:”,那么当前行没有附加作业,所以跳过。

【问题讨论】:

标签: powershell hashtable


【解决方案1】:

你把这种方法弄得太复杂了。这样的事情就足够了:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-07-25
    • 1970-01-01
    • 1970-01-01
    • 2011-10-17
    • 1970-01-01
    • 2023-03-11
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多