diff --git a/Microsoft/Migrate-DHCP.ps1 b/Microsoft/Migrate-DHCP.ps1 new file mode 100644 index 0000000..eaff4b2 --- /dev/null +++ b/Microsoft/Migrate-DHCP.ps1 @@ -0,0 +1,97 @@ +<# +.Synopsis + Script to Automated DHCP Migration +.DESCRIPTION + Takes DHCP Configuration from Source server and converts to Destination (local server) configuration. +.EXAMPLE + .\migrate-dhcp.ps1 -source sbs2011server +.EXAMPLE + .\migrate-dhcp.ps1 -source sbs2011server -detailed +#> +param( + [Parameter(Mandatory=$True,Position=0)] + [string]$source, + [switch]$detailed +) +$destination = $env:Computername +$sourceIp = [System.Net.Dns]::GetHostAddresses($source) +$sourceIP = $sourceIP.IPAddressToString +$currentIP = get-netIPConfiguration +$destIntAlias = $currentIP.InterfaceAlias +$destIP = $currentIP.IPv4Address.IPAddress.ToString() +$destIPv6 = $currentIP.ipv6linklocaladdress.ipAddress +Write-Output "DHCP Migration " +Write-Output "Source : $source" +Write-Output "Source IP : $sourceIP" +Write-Output "Destination : $destination" +Write-Output "Destination IP : $destIP" +Write-Output "Destination IPv6 : $destIPv6" +Write-Output "Reading DHCP Configuration.. Please Wait" +$dhcpConfig = netsh dhcp server "\\$source" dump +if(($dhcpConfig) -like "Unable*") +{ + Write-Output "Error Collecting DHCP Configuration : $source" + Write-Output "Check DHCP Service is Running on Source Server!" +} +else +{ + Write-Output "Processing DHCP Configuration.. Please Wait" + foreach ($line in $dhcpConfig) + { + + if(($line) -like "dhcp*") + { + try + { + if($line.Contains($source)) + { + $line = $line.Replace("$source","$destination") + } + if($line.Contains($sourceIp)) + { + if($line.Contains("Add iprange") -or ($line.Contains("optionvalue 3") -or ($line.Contains("add excluderange")))) + { + # Skip Line Changes + } + else + { + $line = $line.Replace("$sourceIP","$destIP") + } + } + if($line.Contains("23 IPV6ADDRESS")) + { + $line = $line.Split("""") + $sourcev6 = $line[1] + $line = $line.Replace("$sourcev6","$destIPv6") + $line = $line.Replace("%3","") + } + if($line.Contains("Local Area Connection")) + { + $line = $line.Replace("Local Area Connection","$destIntAlias") + } + $command = "netsh $line" + if($detailed) + { + Write-Output $command + } + cmd /c $command | Out-Null + } + catch + { + $errorMessage = $_.exception.message + } + } + } + Add-DhcpServerInDC -DnsName $destination -IPAddress $destIP + Set-DhcpServerv4DnsSetting -ComputerName $destination -DynamicUpdates Always -DeleteDnsRROnLeaseExpiry $true + $username = "$env:UserDomain\$env:userName" + $pwd = Read-Host -AsSecureString -Prompt "Enter Password for $username for DHCP/DNS Update" + $cred = New-Object System.Management.Automation.PSCredential($username,$pwd) + Set-DHCPServerDNSCredential $cred + Set-DHCPServerSetting -ConflictDetectionAttempts 2 + Write-Output "Disable DHCP Service on : $source" + Write-Output "Stop DHCP Service on : $source" + Get-Service -ComputerName $source -ServiceName dhcpserver | Set-Service -StartupType Disabled + Get-Service -ComputerName $source -ServiceName dhcpserver | Stop-Service -Force + Write-Output "DHCP Configuration Complete" +} \ No newline at end of file