Исключить несколько OU в цикле foreach - PullRequest
0 голосов
/ 21 февраля 2020

Мне нужно выяснить, как исключить несколько подразделений из нижеприведенного каждого l oop по различаемому имени, чтобы учетная запись пользователя / компьютера не была найдена дважды (один раз в исходном подразделении, а затем снова в подразделении, в которое оно перемещено.

Я пытался использовать предложение Where, пытаясь отфильтровать одну OU для тестирования, но когда я запускаю сценарий с ним, ничего не обрабатывается ниже. Каков наилучший метод для исключения OU из моего foreach l oop?

foreach ($OU in $OUs) {
    #Where($OU.DistinguishedName -ne 'OU=Disabled Users,DC=test,DC=local') {
        $params = @{
        SearchBase = [String]$OU.DistinguishedName
        SearchScope = [String]"OneLevel"
        AccountInactive = $true
        TimeSpan = ([timespan]$days)
        Verbose = $true
        }

        If($users) { 
            $params.Add("UsersOnly",$true)
        }
        ElseIf($computers) { 
            $params.Add("ComputersOnly",$true)
        }

        $accounts = Search-ADAccount @params

        $params.Clear()

        foreach($account in $accounts) {
            If ($noDisable -notcontains $account.Name -and $account.ObjectClass -eq "User" ) {
                $params = @{
                    Identity = [string]$account.DistinguishedName
                    Verbose = $true
                }
                Disable-ADAccount @params @whatIf

                $params.Add("Description",$description)

                Set-ADUser @params @WhatIf

                $params.Remove('Description')
                $params.Add("TargetPath", 'OU=Disabled Users,DC=test,DC=local')

                Move-ADObject @params @WhatIf
            }
            elseif($noDisable -notcontains $account.Name -and $account.ObjectClass -eq "Computer") {
                $params = @{
                    Identity = [string]$account.DistinguishedName
                    Verbose = $true
                }
                Disable-ADAccount @params @whatIf

                $params.Add("Description",$description)

                Set-ADComputer @params @WhatIf

                $params.Remove('Description')
                $params.Add("TargetPath", 'OU=Disabled Computers,DC=test,DC=local')

                Move-ADObject @params @WhatIf
            }   

        }
    #}
}

enter image description here

1 Ответ

1 голос
/ 21 февраля 2020

Это не то, как, где работает.

Where(){} # Wont Work

Вам необходимо передать Где-объект

$OUs | Where-Object{$_.DistinguishedName -ne 'OU=Disabled Users,DC=test,DC=local'} | Foreach-Object{
    #Do Stuff Here
}

Пример

$Names = @("Steve", "John", "Smith")
$Names | Where-Object{ $_ -ne "John"} | Foreach-Object{
    $_
}

Это вернет

Steve
Smith

Теперь вы сказали, что у вас есть много OU для исключения, поэтому давайте немного изменим его, чтобы исключить несколько имен.

$Names = @("Steve", "John", "Smith", "Billy", "Sally")
$ExcludeList = @("Steve", "Smith", "Sally")
$Names | Where-Object{ $ExcludeList -notcontains $_ } | Foreach-Object{
    $_
}

Это вернет

John
Billy
...