2015-08-03 4 views
-1

пытается получить отчет об аудите активных пользователей. У нас есть подразделение, о котором я не хочу сообщать.Get-ADUser фильтрует специфический OU, настраиваемый столбец

Дайте мне все активные (включены) учетные записи AD. ЗА ИСКЛЮЧЕНИЕМ в конкретном подразделении.

Get-ADUser -Filter{enabled -eq $true} | Select-object Samaccountname,surname,givenname ` 
     | Export-Csv -NoTypeInformation C:\scripts\ActiveUsers.csv 

Как отфильтровать OU=Service Accounts?

Я также должен иметь пользовательский столбец в столбце A выхода csv. Пример: слово «ACME» в столбце A во всех строках.

Спасибо большое Эстер

ответ

3

фильтр на родительских контейнеров

НУ является частью DistinguishedName свойства объекта.

Используйте Where-Object, чтобы отфильтровать объекты, которые находятся внутри определенной OU, удалив первую часть DistinguishedName и сравнивая остальные с DistinguishedName в OU:

$OUDN = "OU=Service Accounts,OU=Accounts,DC=domain,DC=tld" 
Get-ADUser -Filter {Enabled -eq $true} | Where-Object { $_.DistinguishedName -notlike "*,$OUDN" } 

Если вы знаете OU имя, но не полное DistinguishedName, вы можете удалить немедленные дочерние объекты OU из результатов, разделив отличительное имя на компартименты и сравнив второе (ближайший родительский контейнер) с именем, которое вы хотите исключить:

$OUName = "Service Accounts" 
Get-ADUser -Filter {Enabled -eq $true} | Where-Object { 
    $ObjectCN,$ParentCN,$null = $_.DistinguishedName -split "(?<=[^\\])," 
    $ParentCN -ne "OU=$OUName" 
} 

или исключить какой-либо объект с данным именем OU в своем родовом пути:

$OUName = "Service Accounts" 
Get-ADUser -Filter {Enabled -eq $true} | Where-Object { 
    $ObjectCN,$ParentCNs = $_.DistinguishedName -split "(?<=[^\\])," 
    $ParentCNs -notcontains "OU=$OUName" 
} 

Пользовательские значения свойств

Select-Object поддерживает расчетные свойства. Вы можете поставить вычисляемое свойство со статическим выражением в качестве первого свойства, чтобы выбрать, например, так:

Get-ADUser | Select-Object @{Name="MyCustomColumn";Expression={"ACME"}},Name 

экспортирована в CSV, приведенный выше пример будет иметь colunm заголовки «MyCustomColumn» и «Имя» в Col A и B соответственно, col A, всегда сохраняющий значение «ACME», тогда как col B будет содержать отдельные Имена пользователей

+0

Where-Object имеет очень плохую производительность. люди предлагают использовать LDAPFilter над Where-Object –

+0

@KolobCanyon Исправить, но вы не можете выполнить фильтрацию подстановки с атрибутом 'DistinguishedName' с использованием фильтра LDAP :-) –

+0

Я только что узнал, что вчера был трудный путь ... Так что разочарование! –

3

Это сработало - спасибо банде.

Get-ADUser -Filter {enabled -eq $true} | ? {$_.DistinguishedName -notlike "*,OU=Service Accounts,*"} 

И пользовательские колонки:

Select-Object -Property @{n="ColumnA"; e={"ACME"}} 
Смежные вопросы