检查哈希表数组是否包含哈希表

时间:2016-11-29 10:42:14

标签: arrays json powershell hashtable contains

我正在使用cmdlet ConvertFrom-Json从JSON文件中收集数据。这到目前为止工作。 JSON包含一个哈希表数组。

[
    {
        "userSamAccountName":  "jodoe",
        "QuotaGroup":  "AD-Group-Contoso-1"
    },
    {
        "userSamAccountName":  "jodoe",
        "QuotaGroup":  "AD-Group-Contoso-2"
    },
    {
        "userSamAccountName":  "frmark",
        "QuotaGroup":  "AD-Group-Contoso-1"
    },
    {
        "userSamAccountName":  "frmark",
        "QuotaGroup":  "AD-Group-Contoso-2"
    }
]

现在我有另一个包含一些重叠数据的哈希表数组。

[
    {
        "userSamAccountName":  "jodoe",
        "QuotaGroup":  "AD-Group-Contoso-1"
    },
    {
        "userSamAccountName":  "jodoe",
        "QuotaGroup":  "AD-Group-Contoso-2"
    },
    {
        "userSamAccountName":  "niwellenstein",
        "QuotaGroup":  "AD-Group-Contoso-1"
    },
    {
        "userSamAccountName":  "niwellenstein",
        "QuotaGroup":  "AD-Group-Contoso-2"
    }
]

我希望在没有重复的情况下将它们组合起来。

我尝试了一些像select -Unique.Contains()这样的cmdlet,但它并不像我希望它一样工作。

背景:我有一系列AD群组。在此组中,只允许用户成为一个组的成员 - 例如:jodoe可以是AD-Group-Contoso-1或AD-Group-Contoso-2的成员,但不能同时属于这两个组。我需要报告它们。 报告文件将由计划任务处理,该计划任务将其报告给管理员。第一个脚本每20分钟运行一次,而第一个脚本处理报告文件的report-scheduled-task每天运行一次 - 因此我不想在报告文件中包含重复项。

这是我到目前为止所尝试的代码:

# Group users in list to check if user is in 2 or more Groups #
$reportDuplicates = $adUserlist |
                    group -Property userSamAccountName |
                    ? { $_.Count -gt 1 } 
# only select the group of the duplicates #
# $reportDuplicates.Group corresponds to the Json File # 
$reportDuplicates = $reportDuplicates.Group

$reportPath = "C:\\temp\\reports\\" 
$reportDuplicatesPath = $reportPath + "reportADDuplicates.json"

# Check if file already exists #
if (Test-Path $reportDuplicatesPath) {
    # load existing reports #
    $existingDuplicatesReport = Get-Content $reportDuplicatesPath |
                                ConvertFrom-Json
    $reportDuplicates.ForEach({
        if ($existingDuplicatesReport.Contains($_)) {
            $existingDuplicatesReport.Add($_)
        }
    })
    # convert to JSON and save in file #
    $existingDuplicatesReport | ConvertTo-Json | Out-File $reportDuplicatesPath
} else {
    # convert to JSON and save in file #
    $reportDuplicates | ConvertTo-Json | Out-File $reportDuplicatesPath
}

但它不会起作用,我有种感觉,我无法检查一个哈希表数组是否包含哈希表?

如果我将它们全部推入数组并执行select -Unique我只得到哈希表数组的第一个条目。

1 个答案:

答案 0 :(得分:4)

告诉cmake -D CMAKE_BUILD_TYPE=RELEASE -D CMAKE_INSTALL_PREFIX=/usr/local -D WITH_TBB=ON -D BUILD_NEW_PYTHON_SUPPORT=ON -D WITH_V4L=ON -D INSTALL_C_EXAMPLES=ON -D INSTALL_PYTHON_EXAMPLES=ON -D BUILD_EXAMPLES=ON -D WITH_QT=ON -D WITH_GTK=ON -D WITH_OPENGL=ON ..您想要建立唯一性的嵌套哈希表的哪些键:

Select-Object