([adsisearcher]"objectCategory=computer").FindAll() - pobierz listę komputerów z Active Directory
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>