Исключить OU в сценарии PowerShell

У меня есть следующий сценарий:

#Script uses quest powershell commandlets which can be downloaded for free from quest website 
# http://www.quest.com/powershell/activeroles-server.aspx 

#Specify the OU you want to search for inactive accounts 

    $SearchOU=“OU=Sites,DC=nl,DC=example,DC=com" 

#Specify the OU you want to move your inactive computer accounts to 

    #$DestinationOU=“CN=Computers,DC=**,DC=example,DC=com" 

#Specify the number of days that computers have been inactive for 

    $NumOfDaysInactiveFor = 100 

#Specify the description to set on the computer account 

    $Today = Get-Date 

    $Description = "Account disabled due to inactivity on $Today" 

Get-QADComputer -InactiveFor $NumOfDaysInactiveFor -SizeLimit 0 -SearchRoot $searchOU -IncludedProperties ParentContainerDN | foreach {  

    $computer = $_.ComputerName 
    $SourceOU = $_.DN 

    #Remove the commented # from the next line if you want to set the description to be the source OU 
    #$Description = "SourceOU was $SourceOu" 

    Set-QADComputer $computer -Description $Description 

    Disable-QADComputer $computer 

    #Move-QADObject $computer -NewParentContainer $destinationOU  



}

Я хочу исключить одно или несколько подразделений, находящихся в SearchOU, возможно ли это? Я понятия не имею, как я могу с этим справиться.

Я использую следующий SearchOU = OU = Sites, DC = nl, DC = example, DC = com . Я хочу исключить следующие подразделения, например = OU = Warehouses, OU = *, OU = Sites, DC = *, DC = example, DC = com

0
задан 15 August 2017 в 11:28
3 ответа

С помощью параметра -LdapFilter вы можете установить фильтр поиска LDAP с учетом регистра. Но фильтрация AFAIK для DN с, например, (! Ou = WareHouses) не поддерживается ...

Типичным подходом был бы вложенный цикл, который сначала с областью поиска одного уровня перечисляет подразделений, а затем выполняет предполагаемый поиск во всех подразделениях, имена которых не соответствуют *, ou = WareHouses, *

в псевдокоде:

for COUNTRY in DC=*.DC=example,DC=com
  do 
    for OrgUnit in OU=*,DC=$COUNTRY,DC=example,DC=com 
      do
        if ( $OrgUnit != *WareHouses* ) {
           Get-QADComputer -SearchRoot $OrgUnit .... 
        }
    done
done
0
ответ дан 5 December 2019 в 07:31

Это более подробный ответ на HBruijn. Я добавил строку в код ниже, отфильтровав указанные вами подразделения "Склады". Это можно отредактировать, чтобы иметь несколько OU или настроить выражение регулярного выражения в соответствии с вашими потребностями. У тебя так много способов сделать это.

#Specify the OU you want to search for inactive accounts 

$SearchOU=“OU=Sites,DC=nl,DC=example,DC=com" 

#Specify the OU you want to move your inactive computer accounts to 

#$DestinationOU=“CN=Computers,DC=**,DC=example,DC=com" 

#Specify the number of days that computers have been inactive for 

$NumOfDaysInactiveFor = 100 

#Specify the description to set on the computer account 

$Today = Get-Date 

$Description = "Account disabled due to inactivity on $Today" 

Get-QADComputer -InactiveFor $NumOfDaysInactiveFor -SizeLimit 0 -SearchRoot $searchOU -IncludedProperties ParentContainerDN | foreach {  

#Filter out OUs we don't care about

if ( $_.DN -notmatch 'OU=Warehouses,OU=.*,OU=Sites,DC=.*,DC=example,DC=com') {

    $computer = $_.ComputerName 
    $SourceOU = $_.DN 

    #Remove the commented # from the next line if you want to set the description to be the source OU 
    #$Description = "SourceOU was $SourceOu" 

    Set-QADComputer $computer -Description $Description 

    Disable-QADComputer $computer 

    #Move-QADObject $computer -NewParentContainer $destinationOU  
    }
}
0
ответ дан 5 December 2019 в 07:31

Командлеты Quest AD были полезны... Однажды.

Но теперь вы можете просто импортировать модуль ActiveDirectory.

Затем получите список пользователей AD (или компьютеров, или чего-то еще) и отфильтруйте пользователей, содержащихся в определенном подразделении:

$searchou = 'OU=MyOU,DC=domain,DC=com'  
$excludeou = "ouname'

Get-ADUser -filter * -SearchBase $searchou  | where { $_.DistinguishedName
 -notlike $ouname }
0
ответ дан 19 December 2020 в 01:40

Теги

Похожие вопросы