Извините, если описание неясно, но я не мог придумать, как еще его произнести.
У меня есть два CSV-файла:
LocalAdmins.csv - ColumnA = Имя ПК;ColumnB = имя пользователя в локальной группе администраторов
![PC names and local admin usernames for each PC](https://i.stack.imgur.com/5PIGV.png)
Exempt.csv - ColumnA = имя ПК;ColumnB = имя пользователя, которому разрешено быть локальным администратором
![PC names and allowed local admin usernames for each PC](https://i.stack.imgur.com/4F405.png)
То, что я пытаюсь сделать, это перебрать LocalAdmins.csv, и для каждой проверкипосмотрите, отображается ли имя ПК в файле Exempt.csv (или соответствует ли оно каким-либо определенным шаблонам именования в этом файле), и, если совпадение найдено, проверьте, отображается ли имя пользователя локального администратора для этого ПК в LocalAdmins.csv в спискеAllowedUsers для этого ПК в файле Exempt.csv.
Если имя пользователя НЕ в списке AllowedUsers или имя компьютера отсутствует в файле Exempt.csv, выведите запись из LocalAdmins.csv.Вот что у меня есть:
$admins = Import-Csv .\LocalAdmins.csv
$exempt = Import-Csv .\Exempt.csv
$violations = ".\Violations.csv"
foreach ($admin in $admins) {
foreach ($item in $exempt) {
if ($admin.PC -like $item.PC) {
if ($admin.Name -notin ($item.AllowedUsers -split ",")) {
$admin | Export-Csv $violations -Append -NoTypeInformation
}
}
else {
$admin | Export-Csv $violations -Append -NoTypeInformation
}
}
}
Проблема в том, что вложенный цикл foreach генерирует дубликаты, то есть если в Exempt.csv есть 3 строки, то одна запись в LocalAdmins.csv будет иметь 3 дублированных выхода.(по одному на каждую строку в Exempt.csv).Таким образом, результат выглядит следующим образом:
![Current output](https://i.stack.imgur.com/nL1kZ.png)
Когда он должен выглядеть следующим образом:
![Desired output](https://i.stack.imgur.com/kGgdV.png)
Полагаю, проблема в структуре циклов, но мне просто нужна помощь, чтобы выяснить, что нужно настроить.Любой вклад приветствуется!