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>
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.