After my long loved Raspberry Pi died I needed a new way to update a dynamic DNS. I recently discovered the Invoke-WebRequest cmdlet that lets you send an HTTP(S) request and parse pretty much whatever you get in return. My use for this is to keep a site-to-site VPN to my lab up and running.
# Change Path to desired log location and Uri to your Direct or Token URL from FreeDNS
$LogPath = "C:\Scripts\Update-FreeDNS.log"
$Uri = "http://sync.afraid.org/u/your_token/"
# No need to change this
Add-Content -Path $LogPath -Value "$(Get-Date) $(Invoke-WebRequest -Uri $Uri)"
Your log file will look something like this
11/13/2019 18:00:03 No IP change detected for your.dyn.dns with IP 188.8.131.52, skipping update
11/13/2019 19:00:03 No IP change detected for your.dyn.dns with IP 184.108.40.206, skipping update
11/13/2019 20:00:03 No IP change detected for your.dyn.dns with IP 220.127.116.11, skipping update
Save these files to somewhere that makes sense, for example C:\Scripts.
- Open Task Scheduler select Task Scheduler Library to the left and click Create Task to the right
- Name your task “Update-FreeDNS” or something else explaining
- You have to check “Run whether user is logged on or not” so if you do not want your credentials to be saved, create a new user and change to that
- On the trigger tab you can create a schedule that suits your needs. I use every hour, but this is totally up to you
- Under actions click New and paste the following
Add arguments: "C:\Scripts\Update-FreeDNS.ps1"
- At this point you are finished with the necessities, but feel free to click around to see if you need any more options
- OK out and you will be asked for your password
- Run the task on demand and see the result in the log file
As always, ask if anything is unclear.