ForEach L oop повторяется дважды вместо одного - Powershell - PullRequest
1 голос
/ 19 февраля 2020

Я снова сломал foreach l oop и не могу понять, почему. Похоже, что итерация дважды вместо одного для некоторых учетных записей. Я думаю, что у меня есть {} в правильном формате, но, видимо, нет. Может ли кто-нибудь помочь мне найти то, что мне не хватает?

Соответствующий код:

foreach ($OU in $OUs) {

    # Search for User and/or Computer Objects inactive for XX days.  Disable object if not in DoNotDisable Security Groups
    $days = $days + "D"
    $accounts = Search-ADAccount -SearchBase $OU.DistinguishedName -AccountInactive -TimeSpan ([timespan]7D) @scope
    foreach($account in $accounts){
        If ($noDisable -notcontains $account.Name) {
            Write-Host $account
    #        #Disable-ADAccount -Identity $account.DistinguishedName -Verbose $whatIf | Export-Csv $logFile
       }
    }
}

Вывод: Каждая учетная запись компьютера указана дважды , за исключением последнего 2.

enter image description here

1 Ответ

3 голосов
/ 19 февраля 2020

Если ваше дерево каталогов выглядит так:

NC root
 |- TopLevelOU
     |- SubOU
     |   |- Computer1
     |   |- Computer2
     |- Computer3
     |- Computer4

... и вы начинаете с запроса всех OU с, а затем выполняете поиск (рекурсивно) по каждому из них, вы собираетесь получить каждый объект в SubOU дважды - один раз от поиска через TopLevelOU и еще раз от прямого поиска против SubOU.

Добавить -SearchScope OneLevel к вашему Search-ADAccount вызов, если вы хотите, чтобы каждый поиск выполнялся непосредственно дочерним объектам целевого подразделения:

$accounts = Search-ADAccount -SearchBase $OU.DistinguishedName -SearchScope OneLevel -AccountInactive -TimeSpan ([timespan]7D) @scope
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...