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

标签 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"
    }
]

我想将它们组合起来而不出现重复。

我尝试了一些cmdtys,例如select -Unique.Contains(),但它不像我希望的那样工作。

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

这是我迄今为止尝试过的代码:

# 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,我只会获得哈希表数组的第一个条目。

最佳答案

告诉Select-Object您想要在嵌套哈希表的哪些键上建立唯一性:

$arr1 = $json1 | ConvertFrom-Json
$arr2 = $json2 | ConvertFrom-Json

$arr1 + $arr2 | Select-Object -Unique 'userSamAccountName', 'QuotaGroup'

关于arrays - 检查哈希表数组是否包含哈希表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40863794/

相关文章:

javascript - 根据顺序更改深层嵌套 Javascript 对象中同名属性的多个值

json - 解码 JSON 响应时遇到问题

javascript - 在 React JS 的文本字段中打印 JSON 数据

powershell - 如何跟踪由于 PowerShell 脚本中较早的命令而写入的日志文件?

c# - Powershell:同步滚动两个富文本框

java - 将对象添加到对象数组

javascript - lodash 在嵌套数组中选择

Javascript按值将数组转换为分组对象

java - Jackson objectMapping 没有获取 JSON 数据

unit-testing - 如何防止 Pester Mocked Read-Host 在代码覆盖期间提示输入