-
#
-
# Lets start off by looking at DirectoryEntry
-
#
-
$DE =
New-Object System.
DirectoryServices.
DirectoryEntry("LDAP://CN=tstUsr101,OU=MyUsers,DC=corp,DC=lab")
-
#
-
# First lets see what we have access to
-
#
-
$DE | Get-Member
-
#’
-
# Hmmm.. doesn’t seem like much. OH WAIT! Remember Powershell abstracts the class… Lets add psbase
-
#
-
$DE.psbase | Get-Member
-
#
-
# Lets look at what properties are available.
-
#
-
$DE.psbase.Properties
-
#
-
# Thats more like it. You may also note that some AD properties are still missing.
-
# That is because that LDAP doesnt return all the properties. For these you need to "GET" them.
-
$DE.psbase.InvokeGet(‘msExchUMFaxID’)
-
#
-
# Using DirectoryEntry is fine if you know the DN of the object, but what if you need to search?
-
# Lets look at System.DirectoryServices.DirectorySearcher
-
#
-
# The Searcher needs some info so put that in variables first
-
#
-
$root = [ADSI]"" ## This is using the Type Accelerator we spoke about earlier… This is Gets the base
-
$filter = "(&(objectcategory=user))"
-
#
-
# Now Lets create the searcher
-
#
-
$searcher =
New-Object System.
DirectoryServices.
DirectorySearcher($root,
$filter)
-
#
-
# That gets the searcher ready, but to execute we need to call findall() or findone()
-
#
-
$users = $searcher.findAll()
-
#
-
# Lets see what we got. We have alot so lets only pick the first 10
-
#
-
$users | select -first 10
-
#
-
# Tons of info, but notice that this is NOT the same as DirectoryEntry
-
#
-
$users | get-Member
-
#
-
# It still has the properties property, Lets look (but only the first 3)
-
#
-
$users | select -first 3 | %{$_.Properties}
-
#
-
# Finally Lets look at System.DirectoryDervices.ActiveDirectory.Domain
-
#
-
# We can use this to interactively browse around
-
#
-
[system.
directoryservices.
activedirectory.
domain]::
GetCurrentDomain()
-
#
-
# Lets assign that to variable to play with
-
#
-
$domain =
[system.
directoryservices.
activedirectory.
domain]::
GetCurrentDomain()
-
$domain
-
#
-
# Lets see what this has to offer
-
#
-
$domain | get-member
-
#
-
# Tons of cool stuff here.
-
#
-
# We can find all domain controllers
-
$domain.FindAllDomainControllers()
-
#
-
# We Can look at our Domain FSMO
-
#
-
$domain | ft PdcRoleOwner,RidRoleOwner,InfrastructureRoleOwner
-
#
-
# I can even step the tree and get my forest root
-
#
-
$forest = $domain.Forest
-
$forest
-
#
-
# With our new found $forest object… what can do we do?
-
#
-
$forest | Get-Member
-
#
-
# WE can find all our GCs
-
#
-
$forest.FindAllGlobalCatalogs()
-
#
-
# We can look at the Forest Mode
-
#
-
$forest.ForestMode
-
#
-
# Look at the Forest FSMO
-
#
-
$forest | ft SchemaRoleOwner,NamingRoleOwner
-
#
-
# Even look at sites
-
$forest.Sites
-
#
-
# We can go on forever and ever. If you would like we can revisit this later.
-
#