alphasec academy

([adsisearcher]"objectCategory=computer").FindAll() - pobierz listę komputerów z Active Directory

Dodatkowe informacje

Upraszczając wszystko mocno, [adsisearcher] to akcelerator typu dla System.DirectoryServices.DirectorySearcher, dzięki któremu możemy przeszukiwać Active Directory. Jako, że jeden obraz wart tysiąca słów:
PS C:\Users\drg> ([adsisearcher]"objectCategory=computer").FindAll()

Path                                                  Properties
----                                                  ----------
LDAP://CN=DC,OU=Domain Controllers,DC=alphacorp,DC=ad {ridsetreferences, logoncount, codepage, o...
LDAP://CN=2012R2,CN=Computers,DC=alphacorp,DC=ad      {logoncount, codepage, objectcategory, isc...
LDAP://CN=PIOTRPC,CN=Computers,DC=alphacorp,DC=ad     {logoncount, codepage, objectcategory, isc...
LDAP://CN=ANNAPC,CN=Computers,DC=alphacorp,DC=ad      {logoncount, codepage, objectcategory, isc...
LDAP://CN=AGAPC,CN=Computers,DC=alphacorp,DC=ad       {logoncount, codepage, objectcategory, isc...
LDAP://CN=CORE19,CN=Computers,DC=alphacorp,DC=ad      {logoncount, codepage, objectcategory, isc...

PS C:\Users\drg> 
Możemy analogicznie użyć innych filtrów, np.:
objectCategory=user
czy
objectCategory=group
, które wiadomo co odnajdą.
Nic nie stoi również na przeszkodzie, żeby nasze filtry były jeszcze bardziej wyszukane, np. dzięki
servicePrincipalName=MSSQLSvc/*
będziemy mogli zlokalizować serwery MS SQL:
PS C:\Users\drg> ([adsisearcher]"servicePrincipalName=MSSQLSvc/*").FindAll()

Path                                              Properties
----                                              ----------
LDAP://CN=Agnieszka Kuc,DC=alphacorp,DC=ad        {givenname, codepage, objectcategory, dscorepr...
LDAP://CN=PIOTRPC,CN=Computers,DC=alphacorp,DC=ad {logoncount, codepage, objectcategory, iscriti...

PS C:\Users\drg>
By zanurkować jeszcze głębiej, wykorzystajmy Get-Member (gm), by zobaczyć co nam jest tak naprawdę zwracane:
PS C:\Users\drg> ([adsisearcher]"servicePrincipalName=MSSQLSvc/*").FindAll()|gm

   TypeName: System.DirectoryServices.SearchResult

Name              MemberType Definition
----              ---------- ----------
Equals            Method     bool Equals(System.Object obj)
GetDirectoryEntry Method     adsi GetDirectoryEntry()
GetHashCode       Method     int GetHashCode()
GetType           Method     type GetType()
ToString          Method     string ToString()
Path              Property   string Path {get;}
Properties        Property   System.DirectoryServices.ResultPropertyCollection Properties {get;}

PS C:\Users\drg> 
Ciekawym tutaj zdaje się być metoda GetDirectoryEntry zwracająca nam System.DirectoryServices.DirectoryEntry. Co się kryje w środku zostawiam już jako zadanie własne, czyli:
    ([adsisearcher]"servicePrincipalName=MSSQLSvc/*").FindAll().GetDirectoryEntry()|gm
W wyniku tak zebranej wiedzy, możemy sobie wybrać tylko interesujące nas informacje:
PS C:\Users\drg> ([adsisearcher]"servicePrincipalName=MSSQLSvc/*").FindAll().GetDirectoryEntry()|select cn,SchemaClassName,servicePrincipalName|fl

cn                   : {Agnieszka Kuc}
SchemaClassName      : user
servicePrincipalName : {MSSQLSvc/agapc}

cn                   : {PIOTRPC}
SchemaClassName      : computer
servicePrincipalName : {MSSQLSvc/piotrpc.alphacorp.ad:1433, MSSQLSvc/piotrpc.alphacorp.ad, TERMSRV/PIOTRPC, TERMSRV/piotrpc.alphacorp.ad...}

PS C:\Users\drg> 

Przydatne linki


Subskrybuj

Jeśli chcesz otrzymywać nowe, mięsiste protipy na maila, a także zostać czasem powiadomiony o wartościowych wydarzeniach - dołącz do subskrybentów.