2013-03-12 2 views
5

Nell'ultima settimana, ho incontrato PowerShell e ActiveDirectory per la prima volta. Mi piacerebbe essere in grado di trovare un elenco di utenti che non sono amministratori o amministratori del dominio.Modulo PowerShell e ActiveDirectory - Trova utenti che non sono membri di gruppi particolari

Finora, so come ottenere tutte le proprietà per tutti gli utenti ActiveDirectory con il seguente comando/dichiarazione:

Get-ADUser -Filter * -Properties * 

Quello che vorrei fare è di stampare solo i nomi degli attuali utenti ActiveDirectory - che non sono amministratori o amministratori di dominio.

Ecco il codice pseudocodice/Powershell di quello che sto cercando di fare:

$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 
    } 
} 

Quando eseguo il Get-ADUser -Filter * -Properties * di comando, sto vedendo la proprietà MemberOf per ogni utente - che sto pensando potrebbe essere un indizio. Ho anche sentito parlare di AdminCount da varie fonti trovate tramite Google (c'è qualcosa chiamato DomainAdminCount?).

Mi è stato chiesto in particolare di non utilizzare l'estensione PowerShell per ActiveDirectory - anche se varie fonti dicono che avere questa estensione renderà più facile.

Ho passato circa 2 ore a testare varie combinazioni di istruzioni, ma il mio novizio stato PowerShell non mi sta aiutando troppo. Sarei grato per qualsiasi assistenza e alcune spiegazioni chiare dietro ogni feedback.

+0

Comprendo il requisito per controllare l'appartenenza al gruppo Domain Admins, ma non ho idea di cosa intendi per amministratori: tale gruppo non esiste (non per impostazione predefinita) in AD. – BartekB

risposta

3

Questo è abbastanza facile compito e non c'è bisogno di recuperare tutti gli utenti prima e loop:

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

si può fare lo stesso con qualsiasi altro gruppo.

EDIT: query invertiti, per tornare conto che sono non in gruppo (s). BTW, questo non funzionerà:

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

Sarà saltare tutti i conti che non sono membri di qualsiasi altro gruppo di default.

+0

Grazie per l'aiuto BartekB :) Ho anche ottimizzato il codice qui sotto e ottiene esattamente quello che speravo: ## Questa variabile ottiene tutti gli utenti che sono Domain Administrators $ DomainsAdminsDn = (Get-ADGroup 'Domain Admins')) .DistinguishedName ## Questa variabile ottiene tutti gli utenti che sono amministratori $ AdministratorsDn = (Get-gruppo di annunci 'amministratori'). DistinguishedName ## Questa linea avranno tutti gli utenti che non sono "amministratori di dominio" o " Amministratori " Get-ADUser -Filter {(memberOf -ne $ AdministratorsDn) -e (memberOf -ne $ DomainsAdminsDn)} – Rob

+0

Come posso ottenere il gruppo' CN = ROLE_AGENT, OU = PROFILES, OU = NSI PRODUCTION, DC = xxxxx, DC = net'? – Kiquenet

+0

@Kiquenet come hai già DN, puoi passare alla parte 'Get-ADUser -LDAPFilter' e sostituire' $ DomainsAdminsDn' con la tua stringa. – BartekB

0

Con un feedback molto disponibile dal BartekB, sono stato in grado di raggiungere la soluzione qui di seguito:

## 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)} 

Per l'ultima riga, ho voluto unire le due variabili per rendere il filtraggio più specifico (ad esempio cercare utenti che non sono amministratori o amministratori di dominio). Ho dovuto spendere circa 10 minuti per cercare l'equivalente di PowerShell dell'operatore & &, il che era proprio come sospettavo.

0

Si scopre che "Domain Users" è gestito in modo speciale, quindi se si tenta di trovare persone che non fanno parte di quel gruppo non funzionerà.

codice base al largo da: 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

ho usato un po 'di quello che tutti hanno contribuito, e ottimizzato esso. Avevo bisogno di scoprire chi non faceva parte di un gruppo e avevo solo bisogno del loro nome.Fammi sapere se questo ti ha aiutato.

$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"