New-NetStaticIPAddress.ps1


<#PSScriptInfo
 
.VERSION
 1.2
 
.GUID
 d03a0e2b-361d-4994-af70-ae2afc40d661
 
.AUTHOR
 Thomas J. Malkewitz @dotps1
 
.COMPANYNAME
 
.COPYRIGHT
 
.TAGS
 TCPIP IP NIC
 
.LICENSEURI
 
.PROJECTURI
 
.ICONURI
 
.EXTERNALMODULEDEPENDENCIES
 NetTCPIP
 
.REQUIREDSCRIPTS
 
.EXTERNALSCRIPTDEPENDENCIES
 
.RELEASENOTES
 Removed duplicate '#Requires' statment.
 
#>


<#
 
.DESCRIPTION
 Sets a static IP Address on a Network Adapter.
 
.EXAMPLE
 PS C:\> New-NetStaticIPAddress -InterfaceIndex 2 -IPAddress 169.127.0.5 -DefaultGateway 169.127.0.1 -DnsServerAddress 169.127.0.1,169.127.0.2 -PrefixLength 24 -Confirm:$false
 
#>
 


#requires -Modules NetTCPIP

[CmdletBinding(
    ConfirmImpact = "High",
    SupportsShouldProcess = $true
)]
[OutputType(
    [Microsoft.Management.Infrastructure.CimInstance]
)]

param (
    [Parameter(
        ParameterSetName = "ByInterfaceIndex",
        ValueFromPipelineByPropertyName = $true
    )]
    [Alias(
        "ifIndex"
    )]
    [Int]
    $InterfaceIndex,

    [Parameter(
        ParameterSetName = "ByInterfaceAlias",
        ValueFromPipelineByPropertyName = $true
    )]
    [Alias(
        "ifAlias"
    )]
    [String]
    $InterfaceAlias,

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

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

    [Parameter(
        Mandatory = $true
    )]
    [ValidateRange(
        8, 32
    )]
    [Byte]
    $PrefixLength,

    [Parameter()]
    [Microsoft.PowerShell.Cmdletization.GeneratedTypes.NetIPAddress.AddressFamily]
    $AddressFamily = "IPv4",

    [Parameter()]
    [Microsoft.PowerShell.Cmdletization.GeneratedTypes.NetIPAddress.Store]
    $PolicyStore = "ActiveStore",

    [Parameter()]
    [TimeSpan]
    $PreferredLifetime = "MaxValue",

    [Parameter()]
    [Bool]
    $SkipAsSource = $false,

    [Parameter()]
    [Microsoft.PowerShell.Cmdletization.GeneratedTypes.NetIPAddress.Type]
    $Type = "Unicast",

    [Parameter()]
    [ValidateCount(
        1, 3
    )]
    [String[]]
    $DnsServerAddress = $null,

    [Parameter()]
    [CimSession[]]
    $CimSession = $null,

    [Parameter()]
    [Int]
    $ThrottleLimit = 0
)

begin {
    if ($PSBoundParameters.ContainsKey("CimSession")) {
        $Local:PSDefaultParameterValues = @{
            "*:CimSession" = $CimSession
            "*:ThottleLimit" = $ThrottleLimit
        }
    }
}

process {
    switch ($PSCmdlet.ParameterSetName) {
        "ByInterfaceIndex" {
            try {
                $interface = Get-NetAdapter -InterfaceIndex $InterfaceIndex -ErrorAction Stop
            } catch {
                Write-Error $_
                return
            }
        }

        "ByInterfaceAlias" {
            try {
                $interface = Get-NetAdapter -Name $InterfaceAlias -ErrorAction Stop
            } catch {
                Write-Error $_
                return
            }
        }
    }

    if ($PSCmdlet.ShouldProcess($interface)) {
        if ($null -ne (Get-NetIPAddress -InterfaceIndex $interface.InterfaceIndex)) {
            Remove-NetIPAddress -InterfaceIndex $interface.InterfaceIndex -AddressFamily $AddressFamily -Confirm:${ConfirmPreference}
        }

        if ($null -ne (Get-NetRoute -InterfaceIndex $interface.InterfaceIndex)) {
            Remove-NetRoute -InterfaceIndex $interface.InterfaceIndex -AddressFamily $AddressFamily -Confirm:${ConfirmPreference}
        }

        New-NetIPAddress -AddressFamily $AddressFamily -DefaultGateway $DefaultGateway -InterfaceIndex $interface.InterfaceIndex -IPAddress $IPAddress -PolicyStore $PolicyStore -PreferredLifetime $PreferredLifetime -PrefixLength $PrefixLength -SkipAsSource $SkipAsSource -Type $Type

        if ($null -ne $DnsServerAddress) {
            Set-DnsClientServerAddress -InterfaceIndex $interface.InterfaceIndex -ServerAddresses $DnsServerAddress
        }
    }
}

end {
    if ($null -ne $Local:PSDefaultParameterValues) {
        $Local:PSDefaultParameterValues.Clear()
    }
}