Public/Get-ALHADSubnetInfo.ps1

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
<#PSScriptInfo
 
.VERSION 1.1.0
 
.GUID c993f4be-ac1d-4744-92e5-7fd55f58daa4
 
.AUTHOR Dieter Koch
 
.COMPANYNAME
 
.COPYRIGHT (c) 2021-2023 Dieter Koch
 
.TAGS
 
.LICENSEURI https://github.com/admins-little-helper/ALH/blob/main/LICENSE
 
.PROJECTURI https://github.com/admins-little-helper/ALH
 
.ICONURI
 
.EXTERNALMODULEDEPENDENCIES
 
.REQUIREDSCRIPTS
 
.EXTERNALSCRIPTDEPENDENCIES
 
.RELEASENOTES
1.0
- Initial release
 
1.1.0
- Cleaned up code
 
#>



<#
 
.DESCRIPTION
Contains function to get a sorted list of all AD Subnets for the domain the user running the cmdlet is member in.
#>



function Get-ALHADSubnetInfo {
    <#
    .SYNOPSIS
    Returns a sorted list of all AD Subnets for the domain the user running the cmdlet is member in.
 
    .DESCRIPTION
    Returns a sorted list of all AD Subnets for the domain the user running the cmdlet is member in.
 
    .EXAMPLE
    Get-ALHADDSSubnetInfo
 
    .INPUTS
    Nothing
 
    .OUTPUTS
    PSCustomObject
 
    .NOTES
    Author: Dieter Koch
    Email: diko@admins-little-helper.de
 
    .LINK
    https://github.com/admins-little-helper/ALH/blob/main/Help/Get-ALHADSubnetInfo.txt
    #>


    [CmdletBinding()]
    param ()

    $RequiredModules = "ActiveDirectory"

    foreach ($RequiredModule in $RequiredModules) {
        if (-not [bool](Get-Module -Name $RequiredModule)) {
            if (-not [bool](Get-Module -Name $RequiredModule -ListAvailable)) {
                Write-Warning -Message "Module $RequiredModule not found. Stopping function."
                break
            }

            Write-Verbose -Message "Importing $RequiredModule Module"
            Import-Module ActiveDirectory
        }
    }

    Write-Verbose -Message "Get a list of all domain controllers in the forest"
    $DcList = (Get-ADForest).Domains | `
            ForEach-Object { Get-ADDomainController -Discover -DomainName $_ } | `
                ForEach-Object { Get-ADDomainController -Server $_ -Filter * }

    Write-Verbose -Message "Get all replication subnets from Sites & Services"
    $Subnets = Get-ADReplicationSubnet -Filter * -Properties * | Select-Object Name, Site, Location, Description

    $ResultsArray = @()

    foreach ($Subnet in $Subnets) {
        $SiteName = ""

        If ($null -ne $Subnet.Site) { $SiteName = $Subnet.Site.Split(',')[0].Trim('CN=') }
        $DcInSite = $False

        If ($DcList.Site -Contains $SiteName) { $DcInSite = $True }

        $RA = New-Object PSObject
        $RA | Add-Member -type NoteProperty -Name "Subnet" -Value $Subnet.Name
        $RA | Add-Member -type NoteProperty -Name "SiteName" -Value $SiteName
        $RA | Add-Member -type NoteProperty -Name "DcInSite" -Value $DcInSite
        $RA | Add-Member -type NoteProperty -Name "SiteLoc" -Value $Subnet.Location
        $RA | Add-Member -type NoteProperty -Name "SiteDesc" -Value $Subnet.Description
        $ResultsArray += $RA
    }

    $ResultsArray | Sort-Object -Property SiteName, Subnet
}

#region EndOfScript
<#
################################################################################
################################################################################
#
# ______ _ __ _____ _ _
# | ____| | | / _| / ____| (_) | |
# | |__ _ __ __| | ___ | |_ | (___ ___ _ __ _ _ __ | |_
# | __| | '_ \ / _` | / _ \| _| \___ \ / __| '__| | '_ \| __|
# | |____| | | | (_| | | (_) | | ____) | (__| | | | |_) | |_
# |______|_| |_|\__,_| \___/|_| |_____/ \___|_| |_| .__/ \__|
# | |
# |_|
################################################################################
################################################################################
# created with help of http://patorjk.com/software/taag/
#>

#endregion