Az ActiveDirectory modul

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.



Word To HTML Converter