首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >检查哈希表数组是否包含哈希表。

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

Stack Overflow用户
提问于 2016-11-29 10:42:14
回答 1查看 460关注 0票数 2

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

代码语言:javascript
复制
[
    {
        "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"
    }
]

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

代码语言:javascript
复制
[
    {
        "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"
    }
]

我想把它们组合在一起而不需要重复。

我尝试了一些cmdletys,比如select -Unique.Contains(),但是它不像我想要的那样工作。

背景:我有一系列的广告组。在这个组中,用户只能是一个组的成员--例如: jodoe可以是AD- group -Contoso-1或AD-Group-Contoso-2的成员,但不能两者兼而有之。我要报告他们。报表文件将由一个计划好的任务处理,该任务向管理员报告。第一个脚本每20分钟运行一次,处理第一个脚本中的报表文件的报表调度任务每天运行一次,所以我不想在报表文件中重复。

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

代码语言:javascript
复制
# 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,我只会得到哈希表数组的第一个条目。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-11-29 10:56:13

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

代码语言:javascript
复制
$arr1 = $json1 | ConvertFrom-Json
$arr2 = $json2 | ConvertFrom-Json

$arr1 + $arr2 | Select-Object -Unique 'userSamAccountName', 'QuotaGroup'
票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/40863794

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档