Using the Cloudflare API to provide free Dynamic DNS with Windows and Powershell

January 20, 2019

This post details my switch over to using Powershell and Cloudflare to update a DNS record to a server's current IP. This effectively emulates dyndns for this host - except it's free.

There are a load of other options out there, which even include some simple-but-quite-clunky apps for domain registrars like NameCheap; but installing third party software is not the route I want to take.

I previously had my target domain (let's call it hosted on a Linux box, and used SSH to update the DNS settings via a Windows server. This worked well for three years without a blip - but was clunky. I was using a scheduled task to start a bat file, which then ran Putty to run the shell update a config on a server which was only hosting the domain to serve this purpose.

happy events

Although the scheduler>bat>shell tasks have been running well for years, it's time to simplify!

I've been using Cloudflare for years, and set aside time to write a script to use their service for this purpose. As it turns out, people have done this for years - so I've taken one off the shelf.

Introducing "CloudFlareDynDns"

To use the script (which is a Powershell module) available on GitHub, I dropped it over to the windows server, and imported it.

To do this, I copied the file into the all users directory (check $Env:PSModulePath if it's unknown).


The default public path for Powershell modules is C:\Program Files\WindowsPowerShell\Modules\[Module Name]\[Module files]

You can then import the module and check it's available

PS cd C:\Program Files\WindowsPowerShell\Modules\CloudFlareDynamicDns
PS Import-Module .\CloudFlareDynamicDns

PS Get-Module

Imported but not installed

The module is now imported

Setting up our task

I'm using task scheduler for this, as it's straight forward and easy to use. To test this, I simply ran the command on Powershell directly, which works. After, I switched it to calling it from a file and added some logging.

Task Name

Let's get the script set up with some basics (including run when not logged on)

Task Trigger

Something like every hour seems appropriate

Task Action

I'm cheating on the action here, but it works fine for testing

All done!


At the current time, the two things on my mind are:

Further reading

Profile picture

From Dave, who writes to learn things. Thoughts and views are his own.

© 2024, withdave.