Script PowerShell pour rechercher des utilisateurs AD avec adminCount> 0

17

J'ai récemment découvert la fonctionnalité "adminSDHolder" d'Active Directory. J'ai besoin d'un moyen rapide d'identifier tous les utilisateurs qui en seront affectés, à savoir un script pour vider les comptes d'utilisateurs.

Chris S
la source

Réponses:

18

Vous pouvez utiliser ce script powershell pour renvoyer les utilisateurs qui ont un adminCount supérieur à 0, ce qui signifie qu'ils sont affectés par la fonction adminSDHolder. Vous aurez besoin du module AD pour PowerShell, fourni avec RSAT.

import-module activedirectory

get-aduser -Filter {admincount -gt 0} -Properties adminCount -ResultSetSize $null      
MDMarra
la source
4
Voici une méthode plus propre pour faire la même chose: get-aduser -filter {admincount -gt 0} -Properties admincount -ResultSetSize $ null
jbsmith
vous pouvez également créer un filtre dsquery pour faire la même chose
tony roth
2
@tony - Vous pourriez, mais l'OP a demandé spécifiquement un script PowerShell.
MDMarra
3
([adsisearcher]"(AdminCount=1)").findall()
FSailer
la source
2

Ceci est une variante de l'excellente réponse de MDMarra.

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

Cela utilise -LDAPFilter au lieu de -Filter . Certaines personnes préfèrent utiliser la syntaxe du filtre LDAP car elle est portable sur de nombreux types d'applications différents.

Notez que Filter et LDAPFilter ont des caractéristiques de performances similaires puisque le filtre est exécuté côté serveur. Lorsque vous interrogez des répertoires volumineux, essayez toujours de filtrer directement comme ceci, plutôt que d'utiliser Where-Objectce qui entraînerait le téléchargement de tous les objets avant le filtrage. Ceci est décrit en détail dans l'article TechNet Filter vs. Where-Object .

Nic
la source
Je suis un utilisateur fréquent de -LDAPFilterdonc merci de le mentionner et de clarifier ses avantages.
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
la source
1
Cela modifie les autorisations, ce qui n'est pas ce que l'OP recherchait. De plus, la modification des autorisations sur ces objets ne fera pas grand-chose. La prochaine fois que le processus AdminSDHolder s'exécute, il réinitialisera leurs autorisations.
MDMarra
3
Voilà des dragons.
Tom O'Connor