Sometime in Early 2018
Manager: Hey, Dave. I need you to add all of our domains as Accepted Domains in Exchange Online.
Me: Okay. How many do we have?
Manager: Maybe 50?
Me *finally gets access to Dyn and checks*: We have over 170 in Dyn.
Manager: Yeah, all those.
Me: We will need to create a TXT record in Dyn Managed DNS to prove ownership of the domain in Azure first.
Manager: Do your thing.
Me *sqeeeeee*: Okay.
Narrator: And this is how Dave started tinkering with the Dyn Managed DNS REST API.
Introducing the PoShDynDnsApi Module
PoShDynDnsApi module, version 0.1.0, is now available in the PowerShell Gallery.
PoShDynDnsApi is an unofficial PowerShell module used to interact with Dyn Managed DNS REST API.
Notice: I am not affiliated with Dyn and I am not paid to develop this module which began to simplify my day-to-day work. This module has become a learning tool for me to hone my PowerShell skills. I pay $7 monthly in order to have an account that allows me to have a single zone for testing the module.
There are currently 28 commands available to the user.
To see complete examples and command syntax, please visit the module help site.
You can used the following commands to create, extend, test, or remove a session. Additionally, you can view the current session information or view the current session history.
Use the following commands to create a zone by providing required parameters or by providing a zone file, and you can view the zone record. You can also remove a zone. You can view pending changes and publish them or discard them. And you can view the publish notes. Additionally, you can freeze or thaw the zone.
Use the follow commands to view, add, update, or remove DNS records of the following types: A, TXT, CNAME, MX, SRV, or PTR. There is a command to create a new record object that can be used to add or update a record.
Use the following commands to view, create, or delete an HTTP redirect service.
Use the following commands to list nodes and remove a node.
Note: Add commands such as
Add-DynDnsHttpRedirect will create the node prior to adding the record or service.
These commands will allow you to view users, jobs, or tasks.
Please check out the following links for more information on the Dyn Managed DNS REST API.
My First REST API Interaction
I am a PowerShell developer (just now starting calling myself that) with a background in multiple scripting languages, identity management, and much of the Microsoft technology stack. I have connected to MS SQL, Oracle SQL, and mySQL databases with vbScript, PHP, and PowerShell. But, I had never connected to a REST API until I started working on proof of concepts for connecting to Dyn’s API.
PowerShell Lessons Learned
Over the course of the months I’ve spent developing this module, I have learned several lessons about writing better PowerShell scripts and modules.
Globally Scoped Module Variables
This should be avoided. Any variable declared at the module level (in the psm1 file) is scoped to the module.
Dot-sourcing Custom Class ps1 Files
The generally accepted way to have classes available to the module is to include them in the module’s psm1 (most likely through a compile process).
Default Parameter Values from Read-Host
Using this essentially makes the parameter mandatory and may not be part of the
Cross Edition and Cross-Platform
The difference between Invoke-RestMethod and Invoke-WebRequest in Windows PowerShell and PowerShell Core posed significant roadblocks to make the module cross platform. I will blog about this process soon.
Plaster, PSake, and Pester
I have spent a lot of time working on my module scaffolding while writing the module. I have a good understanding of Plaster templates, have a PSake build script that at least gets me to a compiled module state, and have starting devising my logic for general unit and integration tests.
Provide a Solution Sooner than Later
In general, I’m a perfectionist. Everything has to be just right. This module has taken many months of coding to get it to this point, albeit not consistent coding. But I realized while talking with Steven Maglio, that I was going about it wrong. Actually, he told me it was wrong. DevOps is about quick iterations. Get something into the user’s hands and update as you go along. That was the catalyst I needed to do a final, manual test (thankfully, as I had to fix a bug), then deploy to the PowerShell Gallery.
I believe the PoShDynDnsApi module is a powerful and easy tool to manage your Dyn Managed DNS service. I hope you will, too.
If you discover issues, please submit a bug report via GitHub.
If you would like a new feature or command that interacts with the Dyn Managed DNS REST API, please submit the feature request via GitHub.
If you just want to comment on how much you like the module or this blog post, please leave it below.
PowerShell to the people!