Public/New-ADSISiteSubnet.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
function New-ADSISiteSubnet
{
<#
 .SYNOPSIS
  Function to create a new Site Subnet
  
 .DESCRIPTION
  Function to create a new Site Subnet
  
 .PARAMETER SubnetName
  Specifies the SubnetName.
  Example '192.168.8.0/24'
  
 .PARAMETER SiteName
  Specifies the SiteName where the subnet will be assigned
  
 .PARAMETER Location
  Specifies the location of the subnet
  
 .PARAMETER Credential
  Specifies the alternative credential to use.
  By default it will use the current user windows credentials.
  
 .PARAMETER ForestName
  Specifies the alternative Forest where the subnet should be created
  By default it will use the current forest.
  
 .EXAMPLE
  PS C:\> New-ADSISiteSubnet -SubnetName "5.5.5.0/24" -SiteName "FX3" -Location "test"
  
 .NOTES
  Francois-Xavier.Cat
  LazyWinAdmin.com
  @lazywinadm
  github.com/lazywinadmin
  
 .LINK
  https://msdn.microsoft.com/en-us/library/system.directoryservices.activedirectory.activedirectorysubnet(v=vs.110).aspx
#>

    
    [CmdletBinding(SupportsShouldProcess = $true)]
    param
    (
        [Parameter(Mandatory = $true)]
        [String]$SubnetName,

        [Parameter(Mandatory = $true)]
        [String]$SiteName,

        [String]$Location,

        [Alias("RunAs")]
        [System.Management.Automation.PSCredential]
        [System.Management.Automation.Credential()]
        $Credential = [System.Management.Automation.PSCredential]::Empty,

        [String]$ForestName
    )
    
    BEGIN
    {
        Add-Type -AssemblyName System.DirectoryServices.AccountManagement
        
        # Create Context splatting
        $ContextSplatting = @{ ContextType = "Forest" }
        
        IF ($PSBoundParameters['Credential']) { $ContextSplatting.Credential = $Credential }
        IF ($PSBoundParameters['ForestName']) { $ContextSplatting.ForestName = $ForestName }
        
        $Context = New-ADSIDirectoryContext @ContextSplatting
    }
    PROCESS
    {
        TRY
        {
            IF ($PSCmdlet.ShouldProcess($SubnetName, "Create new Subnet"))
            {
                $Subnet = New-Object -TypeName System.DirectoryServices.ActiveDirectory.ActiveDirectorysubnet -ArgumentList $Context, $SubnetName, $SiteName

                if ($PSBoundParameters['Location']) 
                {
                    $Subnet.Location = $Location
                }
                
                $Subnet.Save()
                
                #$SubnetEntry = $Subnet.GetDirectoryEntry()
                #$SubnetEntry.Description = $subnetdescription
                #$SubnetEntry.CommitChanges()
                #$SubnetEntry
            }
        }
        CATCH
        {
            $Error[0]
            break
        }
    }
    END
    {
    }
}