Active Directory Powershell to manage Sites and Subnets – Part 3 (Getting Site and Subnets)
Hello folks! Here are few Active Directory Powershell script snippets that you will find useful while writing scripts. They deal with fetching sites, subnets and servers. Most of the snippets are simple and self-explanatory and can be simply copy-pasted in your existing script.
## Get a specified Active Directory Site.
$siteName = "Default-First-Site-Name"
$configNCDN = (Get-ADRootDSE).ConfigurationNamingContext
$siteContainerDN = ("CN=Sites," + $configNCDN)
$siteDN = "CN=" + $siteName + "," + $siteContainerDN
Get-ADObject -Identity $siteDN -properties *
## Get all Active Directory Sites (and fetch relevant properties)
$configNCDN = (Get-ADRootDSE).ConfigurationNamingContext
$siteContainerDN = ("CN=Sites," + $configNCDN)
Get-ADObject -SearchBase $siteContainerDN -filter { objectClass -eq "site" } -properties "siteObjectBL", "location", "description" | select Name, Location, Description
## Get all Servers in a specified Active Directory site.
$siteName = "Default-First-Site-Name"
$configNCDN = (Get-ADRootDSE).ConfigurationNamingContext
$siteContainerDN = ("CN=Sites," + $configNCDN)
$serverContainerDN = "CN=Servers,CN=" + $siteName + "," + $siteContainerDN
Get-ADObject -SearchBase $serverContainerDN -SearchScope OneLevel -filter { objectClass -eq "Server" } -Properties "DNSHostName", "Description" | Select Name, DNSHostName, Description
## Get all Subnets in a specified Active Directory site.
$siteName = "Default-First-Site-Name"
$configNCDN = (Get-ADRootDSE).ConfigurationNamingContext
$siteContainerDN = ("CN=Sites," + $configNCDN)
$siteDN = "CN=" + $siteName + "," + $siteContainerDN
$siteObj = Get-ADObject -Identity $siteDN -properties "siteObjectBL", "description", "location"
foreach ($subnetDN in $siteObj.siteObjectBL) {
Get-ADObject -Identity $subnetDN -properties "siteObject", "description", "location"
}
## Print a list of site and their subnets
$configNCDN = (Get-ADRootDSE).ConfigurationNamingContext
$siteContainerDN = ("CN=Sites," + $configNCDN)
$siteObjs = Get-ADObject -SearchBase $siteContainerDN -filter { objectClass -eq "site" } -properties "siteObjectBL", name
foreach ($siteObj in $siteObjs) {
$subnetArray = New-Object -Type string[] -ArgumentList $siteObj.siteObjectBL.Count
$i = 0
foreach ($subnetDN in $siteObj.siteObjectBL) {
$subnetName = $subnetDN.SubString(3, $subnetDN.IndexOf(",CN=Subnets,CN=Sites,") - 3)
$subnetArray[$i] = $subnetName
$i++
}
$siteSubnetObj = New-Object PSCustomObject | Select SiteName, Subnets
$siteSubnetObj.SiteName = $siteObj.Name
$siteSubnetObj.Subnets = $subnetArray
$siteSubnetObj
}
## Print the site name of a Domain Controller
$dcName = (Get-ADRootDSE).DNSHostName ## Gets the name of DC to which this cmdlet is connected
(Get-ADDomainController $dcName).Site
.csharpcode, .csharpcode pre
{
font-size: small;
color: black;
font-family: consolas, "Courier New", courier, monospace;
background-color: #ffffff;
/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt
{
background-color: #f4f4f4;
width: 100%;
margin: 0em;
}
.csharpcode .lnum { color: #606060; }
Hope you find them useful.
Cheers,
Swami
--
Swaminathan Pattabiraman
Developer – Active Directory Powershell Team
Comments
- Anonymous
April 08, 2011
Hey!!If I have an IP range, like 10.x.x.x and want to find out what location that is connected to, how can I do that?Thanks - Anonymous
November 28, 2011
Hello Daniel,Did you mean, get Site Name from Subnet IP Address, if yes, you can use Dsquery.Here is excample:Get Site Name from Subnet IP Address in Active Directory (For example, Site Name for Subnet 192.168.2.0/24)Dsquery Subnet -Name 192.168.2.0/24 | Dsget Subnet -Site - Anonymous
February 22, 2012
This has proven to be incredibly usefull, is there a way to prevent the output from being truncated? example I get outpul like:192.168.138.128/26, 192.168.138.0/26, 192.168.129.128/25, 19....How can I get the full output?Thanks - Anonymous
May 02, 2012
Hello,This is really helpful and I wonder if it could be extended to the list of subnet not active? not used by any computers?Thanks,Dom - Anonymous
June 20, 2013
The comment has been removed - Anonymous
June 29, 2013
HiI put together an AD sites and services module a while back. Here's a link to my blog which has all the infoadadmin.blogspot.com.au/.../aadsites-update-1.htmland a link to the module on codeplexhttp://aadsites.codeplex.comhope it helpsAdam - Anonymous
December 26, 2013
any command to add site description - Anonymous
January 04, 2015
I created a onliner for the command:Get-ADObject -SearchB (Get-ADRootDSE).ConfigurationNamingContext -f {objectClass -eq "site"} -Pr siteObjectBL | %{'';$.Name;foreach($s in $.siteObjectBL){$s}} - Anonymous
August 26, 2015
It looks like the formatting truncated multiple lines of the script.