Script de PowerShell para encontrar usuarios de AD con adminCount> 0

17

Recientemente descubrí la función "adminSDHolder" de Active Directory. Necesito una forma rápida de identificar a todos los usuarios que se verán afectados, es decir, un script para volcar las cuentas de usuario.

Chris S
fuente

Respuestas:

18

Puede usar este script de PowerShell para devolver a los usuarios que tienen un adminCount mayor que 0, lo que significa que están afectados por la función adminSDHolder. Necesitará el módulo AD para PowerShell instalado, que viene con RSAT.

import-module activedirectory

get-aduser -Filter {admincount -gt 0} -Properties adminCount -ResultSetSize $null      
MDMarra
fuente
44
Aquí hay un método más limpio para hacer lo mismo: get-aduser -filter {admincount -gt 0} -Properties admincount -ResultSetSize $ null
jbsmith
también podría crear un filtro dsquery para hacer lo mismo
tony roth
2
@tony: podría, pero el OP solicitó específicamente un script de PowerShell.
MDMarra
3
([adsisearcher]"(AdminCount=1)").findall()
FSailer
fuente
2

Esta es una variante de la excelente respuesta de MDMarra.

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

Esto usa -LDAPFilter en lugar de -Filter . Algunas personas prefieren usar la sintaxis de filtro LDAP porque es portátil en muchos tipos diferentes de aplicaciones.

Tenga en cuenta que Filter y LDAPFilter tienen características de rendimiento similares ya que el filtro se ejecuta en el lado del servidor. Al consultar directorios grandes, siempre intente hacer el filtrado directamente de esta manera, en lugar de usar Where-Objectlo que provocaría que todos los objetos se descarguen antes del filtrado. Esto se describe en detalle en el artículo de TechNet Filter vs. Where-Object .

Nic
fuente
Soy un usuario frecuente, -LDAPFilterasí que gracias por mencionarlo y aclarar sus beneficios.
jscott
-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
fuente
1
Esto cambia los permisos, que no es lo que estaba buscando el OP. Además, cambiar los permisos en estos objetos no hará mucho. La próxima vez que se ejecute el proceso AdminSDHolder, restablecerá sus permisos.
MDMarra
3
Aquí hay dragones.
Tom O'Connor