none
Метки в цикле foreach RRS feed

  • Вопрос

  • Доброго времени суток!

    Есть такой код:

    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) отдельное спасибо, не знал что так можно.
    9 сентября 2020 г. 16:15