Лучший отвечающий
Метки в цикле foreach

Вопрос
-
Доброго времени суток!
Есть такой код:
Import-Module ActiveDirectory $profiles = Get-ChildItem -Path \\fs\folders$ -Exclude _* | ?{ $PSItem.PSIsContainer } $users = Get-ADUser -Filter * | ?{ $PSItem.Enabled -ne $False -and $PSItem.Name -notLike "HealthMailbox*" } :outer foreach ($folder in $profiles) { foreach ($user in $users) { if ($folder.Name -eq $user.SamAccountName) { continue outer } } $folder.Name }
Он должен сопоставить имена пользовательских профилей с именами учетных записей из AD. Если нет сопоставления, должен вывести имя. Так вот, скрипт выводит все подряд, т.е. не срабатывает пропуск итерации continue outer
Подскажите, где может быть ошибка?
8 сентября 2020 г. 23:04
Ответы
-
1 делаете много лишних телодвижений которые замедляют выполнение скрипта
2 не видите что происходит в скрипте (нет промежуточных аутпутов), поэтому думаете что скрипт работает неправильно
Import-Module ActiveDirectory $profiles = Get-ChildItem -Path \\fs\folders$ -Exclude _*-Directory $users = Get-ADUser -Filter * | ?{ $PSItem.Enabled -ne $False -and $PSItem.Name -notLike "HealthMailbox*" } :outer foreach ($folder in $profiles.Name) { if ($folder -in $users.SamAccountName) {
write-host "Folder '$folder' is a user profile. Skipping"
continue outer
write-host "this output should not be displayed ever" } else {
write-host "there no users with samAccountName eq to '$folder'" $folder
}
}
The opinion expressed by me is not an official position of Microsoft
- Помечено в качестве ответа Rinat Moustafin 9 сентября 2020 г. 15:10
9 сентября 2020 г. 4:12Модератор
Все ответы
-
1 делаете много лишних телодвижений которые замедляют выполнение скрипта
2 не видите что происходит в скрипте (нет промежуточных аутпутов), поэтому думаете что скрипт работает неправильно
Import-Module ActiveDirectory $profiles = Get-ChildItem -Path \\fs\folders$ -Exclude _*-Directory $users = Get-ADUser -Filter * | ?{ $PSItem.Enabled -ne $False -and $PSItem.Name -notLike "HealthMailbox*" } :outer foreach ($folder in $profiles.Name) { if ($folder -in $users.SamAccountName) {
write-host "Folder '$folder' is a user profile. Skipping"
continue outer
write-host "this output should not be displayed ever" } else {
write-host "there no users with samAccountName eq to '$folder'" $folder
}
}
The opinion expressed by me is not an official position of Microsoft
- Помечено в качестве ответа Rinat Moustafin 9 сентября 2020 г. 15:10
9 сентября 2020 г. 4:12Модератор -
Действительно, у меня все работало, просто я не сразу поверил что у меня почти 2000 профилей без учеток :) казалось что скрипт выводит все подряд. За ($folder -in $users.SamAccountName) отдельное спасибо, не знал что так можно.
- Изменено Rinat Moustafin 9 сентября 2020 г. 16:16
9 сентября 2020 г. 16:15