Script do PowerShell para encontrar usuários do AD com adminCount> 0

17

Descobri recentemente o recurso "adminSDHolder" do Active Directory. Preciso de uma maneira rápida de identificar todos os usuários que serão afetados por ele, ou seja, um script para despejar as contas de usuário.

Chris S
fonte

Respostas:

18

Você pode usar esse script do PowerShell para retornar os usuários que possuem um adminCount maior que 0, o que significa que eles são afetados pelo recurso adminSDHolder. Você precisará do Módulo AD para PowerShell instalado, que vem com o RSAT.

import-module activedirectory

get-aduser -Filter {admincount -gt 0} -Properties adminCount -ResultSetSize $null      
MDMarra
fonte
4
Aqui está um método mais limpa de fazer a mesma coisa: get-ADUser -filter {AdminCount -gt 0} -Properties AdminCount -ResultSetSize $ null
jbsmith
Também é possível criar um filtro dsquery para fazer a mesma coisa
tony roth
2
@tony - Você poderia, mas o OP pediu especificamente um script do PowerShell.
precisa saber é o seguinte
3
([adsisearcher]"(AdminCount=1)").findall()
FSailer
fonte
2

Esta é uma variante da excelente resposta do MDMarra.

Import-Module ActiveDirectory
Get-ADUser -LDAPFilter "(admincount>0)" -Properties adminCount

Isso usa -LDAPFilter em vez de -Filter . Algumas pessoas preferem usar a sintaxe do filtro LDAP porque é portátil em muitos tipos diferentes de aplicativos.

Observe que o Filter e o LDAPFilter têm características de desempenho semelhantes, pois o filtro é executado no lado do servidor. Ao consultar diretórios grandes, sempre tente filtrar diretamente dessa maneira, em vez de usar o Where-Objectque faria com que todos os objetos fossem baixados antes da filtragem. Isso é descrito em detalhes no artigo TechNet Filter vs. Where-Object .

Nic
fonte
Sou usuário frequente de -LDAPFiltermuito obrigado por mencioná-lo e esclarecer seus benefícios.
Jscott # 11/13
-2
## Script name = Set-IheritablePermissionOnAllUsers.ps1
##
## sets the "Allow inheritable permissions from parent to propagate to this
##object"check box
# Contains DN of users
#
#$users = Get-Content C:\C:\Navdeep_DoNotDelete\variables\users.txt

Get-ADgroup -LDAPFilter “(admincount=1)” | select name

$users = Get-ADuser -LDAPFilter “(admincount=1)”

##Get-QADUser -SizeLimit 0 | Select-Object Name,@{n=’IncludeInheritablePermissions’;e={!$_.DirectoryEntry.PSBase.ObjectSecurity.AreAccessRulesProtected}} | Where {!$_.IncludeInheritablePermissions}

ForEach($user in $users)
{
# Binding the users to DS
$ou = [ADSI]("LDAP://" + $user)
$sec = $ou.psbase.objectSecurity
if ($sec.get_AreAccessRulesProtected())
{
$isProtected = $false ## allows inheritance
$preserveInheritance = $true ## preserver inhreited rules
$sec.SetAccessRuleProtection($isProtected, $preserveInheritance)
$ou.psbase.commitchanges()
Write-Host "$user is now inherting permissions";
}
else
{
Write-Host "$User Inheritable Permission already set"
}
}
Ryan Erb
fonte
1
este altera as permissões que não são o que o OP estava procurando. Além disso, alterar as permissões nesses objetos não será suficiente. Na próxima vez em que o processo AdminSDHolder for executado, ele redefinirá suas permissões.
MDMarra
3
Aqui estejam dragões.
Tom O'Connor