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.