Kezdjük el felderíteni az AD adatbázist ezen cmdletek segítségével, nézzük milyen felhasználóink vannak:
PS C:\> Get-QADUser
Name Type DN
---- ---- --
Administrator user CN=Administrator,CN=Users,DC...
Guest user CN=Guest,CN=Users,DC=r2,DC=dom
krbtgt user CN=krbtgt,CN=Users,DC=r2,DC=dom
Szentirmai Ferenc user CN=Szentirmai Ferenc,OU=Észa...
Kardos Viktor user CN=Kardos Viktor,OU=Dél,DC=r...
Szembeszökő különbség, hogy a QAD Get-… cmdletek nem olyan óvatosak, mint a Microsoft ActiveDirectory modulé, hiszen itt, ha nem adok szűrő feltételt, akkor az összes objektumot (vagy legalábbis jó sokat) visszakapok. Nézzük, hogy tulajdonságok tekintetében mennyire óvatos:
PS C:\> Get-QADUser "kulcsár ildikó" | fl *
objectClass : {top, person, organizationalPerson, user}
objectSid : 010500000000000515000000F462067DD14083AB02DB812C5
E040000
givenName : Kulcsár
whenCreated : 2012.03.18. 15:13:47
objectGUID : 2636461C90D77145803AE0B15277FC77
whenChanged : 2012.03.18. 15:13:48
l : Debrecen
sn : Ildikó
edsvaNamingContextDN :
facsimileTelephoneNumber :
mail :
mobile :
physicalDeliveryOfficeName :
telephoneNumber :
st :
wWWHomePage :
City : Debrecen
Company :
…
Láthatjuk, hogy itt sem tapasztalhatunk semmi szerénységet, nagyon sok AD attribútum be lett olvasva. Így ha optimalizálni akarjuk ezeket a lekérdező cmdleteket, érdemes mindenképpen valami szűrő feltételt megadni és az attribútumok tekintetében is valamilyen korlátozást alkalmazni. Ezen alaphelyzet szerinti viselkedést meghatározó paraméterekre vonatkozóan külön cmdletek, a Get-QADPSSnapinSettings és a Set-QADPSSnapinSettings állnak rendelkezésünkre:
PS C:\> Get-QADPSSnapinSettings -DefaultExcludedProperties
allowedAttributes
allowedAttributesEffective
allowedChildClasses
allowedChildClassesEffective
altRecipientBL
aNR
…
Sajnos a Get-QADPSSnapinSettings cmdletnek nincs ’-all’ paramétere, viszont valamilyen paraméter kötelező megadni, így a teljes QAD snapin viselkedését meghatározó paraméterek áttekintése kicsit körülményes. Ennek kiküszöbölésére készítettem egy kis szkriptet, ami minden információt megad nekünk:
Get-Command Get-QADPSSnapinSettings |
Select-Object -ExpandProperty parameters | %{$_.keys} |
?{$_ -match "default" -or $_ -match "integer"} | %{
$p =@{$_ = $true}
new-object -TypeName psobject -Property @{Parameter = $_; Value = (Get-QADPSSnapinSettings @p)}
}
Ennek kimenete:
PS C:\> C:\Munka\get-qadparams.ps1 | ft parameter, value -Wrap
Parameter Value
--------- -----
DefaultExcludedProperties {allowedAttributes, allowedAttributesE
ffective, allowedChildClasses, allowed
ChildClassesEffective...}
DefaultPropertiesExcludedFromNonBaseSea {tokenGroups, tokenGroupsGlobalAndUniv
rch ersal, tokenGroupsNoGCAcceptable}
Integer8AttributesThatContainDateTimes {badPasswordTime, pwdLastSet, whenChan
ged, whenCreated...}
Integer8AttributesThatContainNegativeTi {lockoutDuration, maxPwdAge, minPwdAge
meSpans , lockOutObservationWindow...}
DefaultPageSize 50
DefaultSizeLimit 1000
DefaultSearchScope Subtree
DefaultWildcardMode Ldap
DefaultOutputPropertiesForUserObject {description, displayName, name, objec
tClass...}
DefaultOutputPropertiesForGroupObject {description, displayName, name, objec
tClass...}
DefaultOutputPropertiesForComputerObjec {description, displayName, name, objec
t tClass...}
DefaultOutputPropertiesForAdObject {description, displayName, name, objec
tClass...}
DefaultOutputPropertiesForPasswordSetti {description, displayName, name, objec
ngsObject tClass...}
Itt kapunk választ például arra, hogy mi a maximálisan megjelenített elemszám a lekérdezések eredményeképp (1000), de természetesen ez átírható a Set-QADPSSnapinSettings, vagy akár ad-hoc jelleggel minden lekérdező parancsnál a –SizeLimit paraméterrel. A 0 érték jelenti, hogy nem akarunk korlátozást az eredményhalmaz méretére vonatkozólag:
PS C:\> Get-QADGroup -SizeLimit 0
Name Type DN
---- ---- --
Administrators group CN=Administrators,CN=Builtin...
Users group CN=Users,CN=Builtin,DC=r2,DC...
Guests group CN=Guests,CN=Builtin,DC=r2,D...
Print Operators group CN=Print Operators,CN=Builti...
…
Míg a Microsoft AD modulban speciális keresésekre egy külön cmdlet állt rendelkezésünkre, a Search‑ADAccount, addig itt ez a funkcionalitás a Get-QADUser és Get-QADComputer cmletekbe van beleintegrálva, például keressük a letiltott felhasználókat:
PS C:\> Get-QADUser -Disabled
Name Type DN
---- ---- --
Guest user CN=Guest,CN=Users,DC=r2,DC=dom
krbtgt user CN=krbtgt,CN=Users,DC=r2,DC=dom
Ebben a témában még sok egyebet is el tudunk érni, amit a Microsoft megoldásával nem, vagy csak némi plusz programozás árán. Itt közvetlenül rá tudok keresni például azokra az amúgy nem letiltott felhasználókra, akik 10 napja nem változtattak jelszót:
PS C:\> Get-QADUser -PasswordNotChangedFor 10 -Enabled
Name Type DN
---- ---- --
Administrator user CN=Administrator,CN=Users,DC...
Szentirmai Ferenc user CN=Szentirmai Ferenc,OU=Észa...
Kardos Viktor user CN=Kardos Viktor,OU=Dél,DC=r...
Varga Gyöngyvér user CN=Varga Gyöngyvér,OU=Kelet,...
…
A csoporttagság felderítése tekintetében is van néhány nagyon jó szolgáltatás, amihez figyelembe kell venni azt is, hogy ez a snapin régebbi tartományvezérlőkkel is együttműködik, amelyek még nem ismerik a recursivesearch lehetőséget. Például keresem azokat a felhasználókat, akik még indirekt módon sem tagjai egy csoportnak:
PS C:\> Get-QADUser -NotIndirectMemberOf csoport
Name Type DN
---- ---- --
Administrator user CN=Administrator,CN=Users,DC...
Guest user CN=Guest,CN=Users,DC=r2,DC=dom
krbtgt user CN=krbtgt,CN=Users,DC=r2,DC=dom
Angeli Edina user CN=Angeli Edina,OU=Kelet,DC=...
Ebben a példában létrehoztam egy Csoport nevű csoportot, meg beletettem egy Másikcsoport nevű másik csoportot, és a felhasználóimat szétosztottam a két csoport között, kivéve a beépítetteket és Angeli Edinát. A fenti egyszerű kifejezéssel megkaptam mindezen felhasználókat.