# encoding: ascii
# api: powershell
# title: Set custom IP address
# description: Set custom IP address
# version: 0.1
# type: function
# author: Yves Rosius
# license: CC0
# function: Set-CustomIP
# x-poshcode-id: 6700
# x-archived: 2017-02-09T13:59:00
# x-published: 2017-01-18T18:30:00
#
#
function Set-CustomIP {
<#
.SYNOPSIS
Set network settings.
.DESCRIPTION
Set network settings.
.EXAMPLE
Set-CustomIP 192.168.1.123
.PARAMETER IPAddress
Preferred IP Address. DHCP is available to set IP with DHCP.
.PARAMETER DefaultGateway
Preferred Default Gateway. If no value is provided, a value is calculated.
.PARAMETER PrimaryDNSServer
Primary DNS server. Defaults to 8.8.8.8
.PARAMETER SecondaryDNSServer
Secondary DNS server. Defaults to 8.8.4.4
.PARAMETER AddressFamily
Currently only available in IPv4
.PARAMETER InterfaceIndex
Specify which interface using InterfaceIndex. Defaults to physical interface.
#>
[CmdletBinding()]
Param(
[Parameter(Mandatory=$True, Position=1)]
[string] $IPAddress,
[Parameter(Mandatory=$False, Position=2)]
[string] $DefaultGateway,
[Parameter(Mandatory=$False, Position=3)]
[string] $PrimaryDNSServer = "8.8.8.8",
[Parameter(Mandatory=$False, Position=4)]
[string] $SecondaryDNSServer = "8.8.4.4",
[Parameter(Mandatory=$False, Position=5)]
[string] $AddressFamily = "IPv4",
[Parameter(Mandatory=$False, Position=6)]
[string] $PrefixLength = "24",
[Parameter(Mandatory=$False, Position=7)]
[string] $InterfaceIndex = (Get-NetAdapter -physical).ifIndex
)
### Removes current IP settings to avoid clutter.
Get-NetIPAddress -InterfaceIndex $InterfaceIndex -AddressFamily $AddressFamily | % {Remove-NetIPAddress $_.IPAddress -Confirm:$false}
Remove-NetRoute -InterfaceIndex $InterfaceIndex -Confirm:$false
if ($IPAddress -eq "DHCP") {
Get-NetAdapter -InterfaceIndex $InterfaceIndex | Set-NetIPInterface -Dhcp enabled
break
}
### If DefaultGateway not specified, calculate standard value for Default Gateway.
if (!$DefaultGateway) {
$IPArray = $IPAddress.split(".")
$DefaultGateway = $IPArray[0] + "." + $IPArray[1] + "." + $IPArray[2] + ".1"
}
New-NetIPAddress `
-InterfaceIndex $InterfaceIndex `
-IPAddress $IPAddress `
-DefaultGateway $DefaultGateway `
-AddressFamily $AddressFamily `
-PrefixLength $PrefixLength `
-Confirm:$false
Set-DnsClientServerAddress `
-InterfaceIndex $InterfaceIndex `
-ServerAddresses $PrimaryDNSServer, $SecondaryDNSServer
}