Bár igazából ez a modul nem az alap PowerShell része, de a Windows rendszerek üzemeltetőinek az Active Directory (újabb nevén Active Directory Domain Services) annyira fontos terület, hogy fontosnak tartottam ebben a könyvben ismertetni.
A PowerShell 2.0 egyik legjelentősebb gyakorlati újdonsága az Active Directory-val kapcsolatos cmdletek megjelenése. Ugyan a PowerShell 1.0 is kezelte az AD-t, de nagyon nehézkesen, „elrettentésül” az 2.21 Active Directory függeléki fejezetben meghagytam az ősi módszer ismertetését, ki tudja, esetleg valaki rászorul erre is, ha nincs lehetőség Windows Server 2008 R2 vagy Windows 7 és a Management Gateway telepítésére, amelyekkel akár régebbi tartományvezérlők is kezelhetők az új cmdletekkel.
Ennek a fejezetnek nem célja, hogy a kedves olvasót komplett Active Directory tanfolyamban részesítse, hanem csak a PowerShell szempontjából vett érdekességeket emelem ki, az Active Directory mibenlétét, a benne tárolt adatok jellegzetességeit ismertnek tételezem fel.
Ahhoz, hogy az Active Directory-val kapcsolatos cmdletek és az AD provider elérhető legyen, elsőként importálni kell az ActiveDirectory modult. Ezt akkor tehetjük meg, ha a Windows Server 2008 R2 rendszergazda eszközei között található Active Directory module for Windows PowerShell képességet telepítjük.
130 . ábra Az ActiveDirectory PowerShell modul telepítése
A képesség birtokában maga az import így néz ki:
[22] PS C:\> Import-Module activedirectory
Ezzel összesen 76 új cmdletet kapunk. Mint említettem, itt most nem célom az összes ismertetése, inkább csak a használatuk sajátosságaira szeretném felhívni a figyelmet. Az egyik ilyen sajátosság, hogy minden főnév AD előtagot kapott, így ADUser, ADComputers, ADGroup, stb. főnevekkel fogunk találkozni. Ennek oka az, hogy más modulok és korábbi snap-in-ek is kezeltek AD objektumokat, így az Exchange Server 2007-nek volt például Get-User cmdletje, és annak érdekében, hogy a két különböző, nem teljesen egyformán működő cmdlet ne okozzon zavart a scriptjeinkben, ezért ezzel a kis előtaggal teljesen egyértelműsítette a Microsoft a helyzet.
Nézzük tehát ezeket a főneveket:
[36] PS C:\> Get-Command -Module activedirectory | Group-Object noun
Count Name Group
----- ---- -----
3 ADComputerServiceAccount {Add-ADComputerServiceAccount, Get-ADComput...
3 ADDomainControllerPass... {Add-ADDomainControllerPasswordReplicationP...
3 ADFineGrainedPasswordP... {Add-ADFineGrainedPasswordPolicySubject, Ge...
3 ADGroupMember {Add-ADGroupMember, Get-ADGroupMember, Remo...
3 ADPrincipalGroupMember... {Add-ADPrincipalGroupMembership, Get-ADPrin...
2 ADAccountExpiration {Clear-ADAccountExpiration, Set-ADAccountEx...
4 ADAccount {Disable-ADAccount, Enable-ADAccount, Searc...
3 ADOptionalFeature {Disable-ADOptionalFeature, Enable-ADOption...
1 ADAccountAuthorization... {Get-ADAccountAuthorizationGroup}
1 ADAccountResultantPass... {Get-ADAccountResultantPasswordReplicationP...
4 ADComputer {Get-ADComputer, New-ADComputer, Remove-ADC...
2 ADDefaultDomainPasswor... {Get-ADDefaultDomainPasswordPolicy, Set-ADD...
2 ADDomain {Get-ADDomain, Set-ADDomain}
1 ADDomainController {Get-ADDomainController}
1 ADDomainControllerPass... {Get-ADDomainControllerPasswordReplicationP...
4 ADFineGrainedPasswordP... {Get-ADFineGrainedPasswordPolicy, New-ADFin...
2 ADForest {Get-ADForest, Set-ADForest}
4 ADGroup {Get-ADGroup, New-ADGroup, Remove-ADGroup, ...
7 ADObject {Get-ADObject, Move-ADObject, New-ADObject,...
4 ADOrganizationalUnit {Get-ADOrganizationalUnit, New-ADOrganizati...
1 ADRootDSE {Get-ADRootDSE}
6 ADServiceAccount {Get-ADServiceAccount, Install-ADServiceAcc...
4 ADUser {Get-ADUser, New-ADUser, Remove-ADUser, Set...
1 ADUserResultantPasswor... {Get-ADUserResultantPasswordPolicy}
1 ADDirectoryServer {Move-ADDirectoryServer}
1 ADDirectoryServerOpera... {Move-ADDirectoryServerOperationMasterRole}
1 ADServiceAccountPassword {Reset-ADServiceAccountPassword}
1 ADAccountControl {Set-ADAccountControl}
1 ADAccountPassword {Set-ADAccountPassword}
1 ADDomainMode {Set-ADDomainMode}
1 ADForestMode {Set-ADForestMode}
Elsőként pedig próbáljuk meg kinyerni a címtárban tárolt felhasználókat a Get-ADUser cmdlet segítségével:
[31] PS C:\> Get-ADUser
cmdlet Get-ADUser at command pipeline position 1
Supply values for the following parameters:
(Type !? for Help.)
Filter: *
DistinguishedName : CN=Administrator,CN=Users,DC=r2,DC=dom
Enabled : True
GivenName :
Name : Administrator
ObjectClass : user
ObjectGUID : fff8a606-7f70-4744-9437-a7b41d618335
SamAccountName : Administrator
SID : S-1-5-21-3398938913-3940250523-927435294-500
Surname :
UserPrincipalName :
DistinguishedName : CN=Guest,CN=Users,DC=r2,DC=dom
Enabled : False
GivenName :
Name : Guest
ObjectClass : user
ObjectGUID : f42aba4d-8c3f-4214-82f0-8b8f275f3463
SamAccountName : Guest
SID : S-1-5-21-3398938913-3940250523-927435294-501
Surname :
UserPrincipalName :
DistinguishedName : CN=krbtgt,CN=Users,DC=r2,DC=dom
Enabled : False
GivenName :
Name : krbtgt
ObjectClass : user
ObjectGUID : d1b27942-8d0e-4ae5-b83b-d26af96170c5
SamAccountName : krbtgt
SID : S-1-5-21-3398938913-3940250523-927435294-502
Surname :
UserPrincipalName :
DistinguishedName : CN=Helpdesk Hugó,OU=IT Admins,DC=r2,DC=dom
Enabled : True
GivenName : Hugó
Name : Helpdesk Hugó
ObjectClass : user
ObjectGUID : 69896454-02e3-4c3c-bc6f-9598dd96b5c5
SamAccountName : hh
SID : S-1-5-21-3398938913-3940250523-927435294-1113
Surname : Helpdesk
UserPrincipalName : hh@r2.dom
…
Látható, hogy meg kell adni kötelező paraméterként a Filter-nek valamilyen szűrőfeltételt, ami persze lehet a „*”, azaz az összes felhasználó is kiolvasható, de általában nem valószínű, hogy mindre szükségünk van. A kimenetben megkaptam a felhasználókat, de csak néhány tulajdonságukkal együtt. Ez megint csak - a kötelező szűrővel együtt – azt a célt szolgálja, hogy lehetőleg kíméljük mind a tartományvezérlőket, mind a hálózatot, hiszen ezekkel a korlátokkal kevesebb adatot kell küldenie számunkra. Ha több vagy más tulajdonságadatot szeretnénk, akkor használhatjuk a Property paramétert:
[39] PS C:\> Get-ADUser -Identity soostibor -Properties title
DistinguishedName : CN=Soós Tibor,OU=gyuri,DC=r2,DC=dom
Enabled : True
GivenName : Soós
Name : Soós Tibor
ObjectClass : user
ObjectGUID : 60ee5a80-3305-43be-beb7-a71055d92225
SamAccountName : SoosTibor
SID : S-1-5-21-3398938913-3940250523-927435294-1178
Surname : Tibor
Title : oktató
UserPrincipalName : SoosTibor@r2.dom
Itt láthatjuk, hogy megjelent az alapadatok mellett a Title tulajdonság is. Vagy nézzük meg egy felhasználó összes AD-ban tárolt tulajdonságát:
[40] PS C:\> Get-ADUser soostibor -Properties *
AccountExpirationDate :
accountExpires : 9223372036854775807
AccountLockoutTime :
AccountNotDelegated : False
AllowReversiblePasswordEncryption : False
BadLogonCount : 0
badPasswordTime : 0
badPwdCount : 0
CannotChangePassword : False
CanonicalName : r2.dom/gyuri/Soós Tibor
Certificates : {}
City : Management
CN : Soós Tibor
codePage : 0
Company :
Country :
countryCode : 0
Created : 2010. 01. 07. 22:51:23
createTimeStamp : 2010. 01. 07. 22:51:23
…
A fenti példában már nem a Filter-rel szűrtem, hanem egy konkrét felhasználóra voltam kíváncsi, amit az Identity paraméternél adtam meg. De mire is hivatkoztam itt? Az Identity a help alapján a következőket jelentheti:
[41] PS C:\> get-help get-aduser -Parameter identity
-Identity <ADUser>
Specifies an Active Directory user object by providing one of the followin
g property values. The identifier in parentheses is the LDAP display name
for the attribute.
Distinguished Name
Example: CN=SaraDavis,CN=Europe,CN=Users,DC=corp,DC=contoso,DC=com
GUID (objectGUID)
Example: 599c3d2e-f72d-4d20-8a88-030d99495f20
Security Identifier (objectSid)
Example: S-1-5-21-3165297888-301567370-576410423-1103
SAM account name (sAMAccountName)
Example: saradavis
…
Azaz az Identity több AD attribútum is lehet a Distinguished Name, GUID, SID és a „Pre-Windows 2000 logon name”. Sajnos a User Principal Name nem lehet, meg egyéb nevek sem (Display Name, CN), de azért ezek alapján is hivatkozhatunk a felhasználókra, csak ekkor filtert kell használni.