Powershell script to change from static to dynamic IP addressing


I’ve been working on validating an email server migration plan which has required utilizing test servers isolated from the production network.  Because they are offnet, I have to frequently switch my laptop from the production to test networks, which involves reconfiguring my network card from dynamic to static IP addresses.

I could use Windows XP’s alternate IP addressing capability to change IP addresses, but I find it takes several minutes for XP to make the automatic changeover.  I wanted to create a configuration script that would make the desired changes so that I could save shortcuts to those scripts on my desktop, which would allow for quick NIC setting modifications.

I originally tried to use the netsh command to specify NIC settings, but despite all the example syntax I found online, I was only able to get the static to dynamic changes to work, not the dynamic to static.

I finally decided to use Powershell to make these changes.  I found the following scripts at PowerShell Pro and modified them ever so slightly for my own use.

### set static IP addressing – save as setstatic.ps1
$NICs = Get-WMIObject Win32_NetworkAdapterConfiguration `
| where{$_.IPEnabled -eq “TRUE”}
Foreach($NIC in $NICs) {
  $NIC.EnableStatic(“192.168.1.5”, “255.255.255.0”)
  $NIC.SetGateways(“192.168.1.254”)
  $DNSServers = “198.168.1.1”,”198.168.1.1″
  $NIC.SetDNSServerSearchOrder($DNSServers)
  $NIC.SetDynamicDNSRegistration(“FALSE”)
}
###

### set dynamic addressing – save as setdynamic.ps1
$NICs = Get-WMIObject Win32_NetworkAdapterConfiguration `
| where{$_.IPEnabled -eq “TRUE”}
Foreach($NIC in $NICs) {
 $NIC.EnableDHCP()
 $NIC.SetDNSServerSearchOrder()
}
###

I then created shortcuts to the two .ps1 files using the following targets:

%windir%\system32\WindowsPowerShell\v1.0\powershell.exe c:\scripts\setdynamic.ps1

%windir%\system32\WindowsPowerShell\v1.0\powershell.exe c:\scripts\setstatic.ps1

I saved each shortcut to my desktop, and now I can switch IP addresses in about 15 seconds.

3 Responses to “Powershell script to change from static to dynamic IP addressing”

  1. Andy Says:

    I use the following batch files to accomplish this…
    To switch to dhcp
    netsh interface ip set address “Local Area Connection” dhcp
    netsh interface ip set dns “Local Area Connection” dhcp

    To assign an ip address
    netsh interface ip set address name=”Local Area Connection” static 192.168.1.6 255.255.255.0 192.168.1.1 1
    netsh interface ip set dns “Local Area Connection” static 4.2.2.1

    For static the first set is your ip, then subnet mask then gateway then metric. I use 4.2.2.1 as it’s a public dns server and easy to remember.

  2. Sunnie Says:

    Hi, Julie
    I have both IPv4 and IPv6 on my machine,
    after I ran setdynamic.ps1, IPv6 is still static.
    then how to apply dynamic IP address on IPv6 using Powershell?

  3. Eric Says:

    Hi Julie,
    I have found this script very useful, but have one question, how would you set it to run the same type of info on remote machines, that I have listed in a txt file. For example, I have recently decommissioned a dc and need to change the dns and wins listings on about 50 servers and would like to script out the process rather than login and perform manually.

    Thanks!


Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s

%d bloggers like this: