2013-03-12 9 views
5

W zeszłym tygodniu po raz pierwszy natknąłem się na PowerShell i ActiveDirectory. Chciałbym móc znaleźć listę użytkowników, którzy nie są administratorami lub administratorami domeny.Moduł PowerShell i ActiveDirectory - Znajdź użytkowników, którzy nie są członkami poszczególnych grup

tej pory wiem, jak uzyskać wszystkie właściwości dla wszystkich ActiveDirectory użytkowników za pomocą następującego polecenia/oświadczenie:

Get-ADUser -Filter * -Properties * 

Co chciałbym zrobić, to wydrukować tylko nazwy użytkowników obecnych użytkowników ActiveDirectory - To nie są administratorzy ani administratorzy domeny.

Oto kod pseudokod/PowerShell, co staram się robić:

$users = Get-ADUser -Filter * -Properties * 
foreach($u in $users){ 
    if ($u isn't an administrator OR $u isn't a domain administrator){ 
     Write-Host "User Name:" $u.Name 
    } 
} 

Kiedy uruchomić polecenie Get-ADUser -Filter * -Properties *, widzę właściwość dla każdego użytkownika MemberOf - co myślę może być trop. Słyszałem również o AdminCount z różnych źródeł znalezionych przez Google (czy jest coś o nazwie DomainAdminCount?).

Zostałem poproszony, aby nie używać rozszerzenia PowerShell dla ActiveDirectory - nawet jeśli różne źródła mówią, że rozszerzenie to ułatwi.

Spędziłem około 2 godziny testując różne kombinacje zdań, ale mój nowicjuszowy status PowerShell nie pomaga mi zbytnio. Byłbym wdzięczny za wszelką pomoc i pewne jasne wyjaśnienia za jakąkolwiek reakcją.

+0

Rozumiem wymóg sprawdzania członkostwa w grupie Administratorzy domeny, ale nie mam pojęcia, co masz na myśli przez Administratorów - taka grupa nie istnieje (nie domyślnie) w AD. – BartekB

Odpowiedz

3

To dość proste zadanie i nie trzeba pobierać wszystkich użytkowników Pierwszy i pętla:

$DomainsAdminsDn = (Get-ADGroup 'Domain Admins').DistinguishedName 
Get-ADUser -Filter { -not (memberof -eq $DomainsAdminsDn) } 
# OR 
Get-ADUser -LDAPFilter "(!(memberof=$DomainsAdminsDn))" 

Można zrobić to samo z innej grupy.

EDIT: Odwrócone zapytań do powrotu rachunku, nie grupie (ów). BTW, to nie zadziała:

Get-ADUser -Filter { memberof -ne $DomainsAdminsDn } 

Pominie to wszystkie konta, które nie należą do żadnej innej grupy niż domyślna.

+0

Dzięki za pomoc BartekB :) Poprawiłem również poniższy kod i otrzymałem dokładnie to, na co liczyłem: ## Ta zmienna pobiera wszystkich użytkowników, którzy są administratorami domeny $ DomainsAdminsDn = (Get-ADGroup 'Domain Admins') .DistinguishedName ## zmienna ta dostaje wszystkich użytkowników, które są Administratorzy $ AdministratorsDn = (Get-adgroup „Administratorzy”). distinguishedName ## linia ta będzie uzyskanie wszystkich użytkowników, którzy nie są „Administratorzy domeny” lub " Administratorzy " Get-ADUser -Filtr {(memberOf -ne $ AdministratorsDn) -i (memberOf -ne $ DomainsAdminsDn)} – Rob

+0

Jak mogę uzyskać grupę' CN = ROLE_AGENT, OU = PROFILES, OU = NSI PRODUCTION, DC = xxxxx, DC = net'? – Kiquenet

+0

@Kiquenet jak już masz DN, możesz przejść do części 'Get-ADUser -LDAPFilter' i zamienić' $ DomainsAdminsDn' na twój ciąg znaków. – BartekB

0

z bardzo pomocne informacje zwrotne od BartekB, udało mi się osiągnąć rozwiązanie poniżej:

## This variable gets all the users that are Domain Administrators 
$DomainsAdminsDn = (Get-ADGroup 'Domain Admins').DistinguishedName 

## This variable gets all the users that are Administrators 
$AdministratorsDn = (Get-ADGroup 'Administrators').DistinguishedName 

## This line will get all the users that are not "Domain Administrators" or "Administrators" 
Get-ADUser -Filter {(memberOf -ne $AdministratorsDn) -and (memberOf -ne $DomainsAdminsDn)} 

ostatniego wiersza, chciałem połączyć dwie zmienne, aby filtrowanie bardziej specyficzne (tj szukać użytkownicy, którzy nie są administratorami lub administratorami domeny). Musiałem poświęcić około 10 minut na szukanie odpowiednika PowerShella dla operatora & & - który był dokładnie taki, jak podejrzewałem.

0

Okazało się, że "Użytkownicy domeny" są traktowane specjalnie, więc jeśli spróbujesz znaleźć osoby spoza tej grupy, to nie zadziała.

Opierając się kod od: http://powershell.org/wp/forums/topic/find-users-not-in-a-group/

Import-Module ActiveDirectory 
$users = Get-ADUser -Filter {Enabled -eq $true} -Properties MemberOf, PrimaryGroup 
$dugDn = (Get-ADGroup "Domain Users").DistinguishedName 
foreach ($user in $users) 
{ 
    Write-Verbose "Working on $($user.Name)" 
    $groups = $user.MemberOf, $user.PrimaryGroup 
    if ($groups -NotContains $dugDn) 
    { 
     Write-Host "$($user.SamAccountName) not in the domain users group" 
    } 
} 
1

użyłem trochę czego każdy przyczynił, i manipulowane go. Musiałem się dowiedzieć, kto nie jest grupą, a ja tylko potrzebowałem ich nazwiska.Daj mi znać, jeśli to ci pomogło.

$Internet_Users = Get-ADGroup -Filter {Name -like "Internet_Users" } 
Get-ADUser -Filter { -not (memberof -eq $Internet_Users) -and (enabled -eq "True" -and objectclass -eq "user")} |Select Name | Export-CSV "C:\Users\YOURNAME\Documents\Enabled_Users_Without_Internet_Users_Group.csv" 
Powiązane problemy