コマンドレット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()
のようないくつかのコマンドレットを試しましたが、機能しないように動作しません。
背景:私はさまざまなADグループを持っています。このグループでは、ユーザーは1つのグループのメンバーのみが許可されます。たとえば、jodoeはAD-Group-Contoso-1またはAD-Group-Contoso-2のメンバーになることができます。そして私はそれらを報告する必要があります。 レポートファイルは、管理者に報告するスケジュールされたタスクによって処理されます。最初のスクリプトは20分ごとに実行され、最初のスクリプトからレポートファイルを処理するreport-scheduled-taskが1日に1回実行されるため、レポートファイルに重複を入れたくありません。ここで
は、私がこれまで試したどのように私のコードです:# 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
を実行すると、ハッシュテーブルの配列の最初のエントリのみが取得されます。
のHashtableが参照型であり、 '(入って)'まったく同じ*アイデンティティ*のオブジェクトではなく、オブジェクトを探します。 *類似の*コンテンツ。コレクションを繰り返し処理し、比較を手作業で行う必要があります –