Public/Get-ADSiteDetail.ps1
<#
.SYNOPSIS Getting details of Active Directory site. .DESCRIPTION Function is querying Active Directory site and putting certain properties into custom object which is afterwards outputed on the screen. .PARAMETER All Parameter to search against all Active Directory sites. .PARAMETER SiteName Parameter to search against specific Active Directory site. .EXAMPLE PS C:\> Get-ADSiteDetail -All SiteName SiteLinks SiteSubnets -------- --------- ----------- Default-First-Site-Name Amsterdam Amsterdam-NewYork,Amsterdam-Jordan 10.10.10.0/24,10.10.5.0/24,10.30.12.0/24,192.168.2.0/24 NewYork Amsterdam-NewYork,NewYork-Jordan 10.40.11.0/24,10.200.4.0/24,10.20.10.0/24,192.168.0.0/24 Jordan Amsterdam-Jordan,NewYork-Jordan 10.70.10.0/24 .EXAMPLE PS C:\> Get-ADSiteDetail -SiteName Amsterdam SiteName SiteLinks SiteSubnets -------- --------- ----------- Amsterdam Amsterdam-NewYork,Amsterdam-Jordan 10.10.10.0/24,10.10.5.0/24,10.30.12.0/24,192.168.2.0/24 .INPUTS System.String .OUTPUTS PSCustomObject #> Function Get-ADSiteDetail { [CmdletBinding(DefaultParameterSetName='All')] [OutputType([pscustomobject])] param ( # Parameter to check all of the AD sites. [Parameter(ParameterSetName='All')] [switch]$All, # Name of the specific AD site. [Parameter(ParameterSetName='SiteName', ValueFromPipelineByPropertyName=$true, Position=1)] [Alias('Site','Name')] [ValidateNotNullOrEmpty()] [string]$SiteName ) process { if ($psCmdlet.ParameterSetName -eq 'All') { $SiteList = [System.DirectoryServices.ActiveDirectory.Forest]::GetCurrentForest().sites $SiteDetails = [System.Collections.ArrayList]::new() foreach ($Site in $SiteList) { $TempObject = [PSCustomObject]@{ SiteName = $($Site.Name) SiteLinks = $($Site.SiteLinks.Name) -join ',' SiteSubnets = $($Site.Subnets.Name) -join ',' } [void]$SiteDetails.Add($TempObject) } $SiteDetails | Format-Table -AutoSize -Wrap } elseif ($psCmdlet.ParameterSetName -eq 'SiteName') { $SiteList = [System.DirectoryServices.ActiveDirectory.Forest]::GetCurrentForest().sites | Where-Object {$_.Name -eq "$SiteName"} $SiteDetails = [System.Collections.ArrayList]::new() foreach ($Site in $SiteList) { $TempObject = [PSCustomObject]@{ SiteName = $($Site.Name) SiteLinks = $($Site.SiteLinks.Name) -join ',' SiteSubnets = $($Site.Subnets.Name) -join ',' } [void]$SiteDetails.Add($TempObject) } $SiteDetails | Format-Table -AutoSize -Wrap } } } |