Skip to main content

Hello World

· 3 min read

I'm the CEO of a US-based IT services company (Managed Services Provider, or MSP), and I like technology (and people! People are great, I love people! We use technology to serve them, but I have a soft spot for the tech like a true geek!). While I have a long history with and interest in technology and programming and security, I've spent my free time relaxing by playing with PowerShell lately, and have had fun sharing them with peers to help the community.

Version Control (Git/GitHub)

With programming being more of a spare-time/as-needed activity even though I've been doing so since I was a teenager, I finally figured out in early 2024 how to use version control (not for lack of trying--it's a lot to mentally map Git functionality conceptually to practical application!) and with the little that I've learned (always something new!) I've managed to publish some scripts for public use.

Applicability (RMM)

Most of my scripts are around software deployment or security alignment, with some random exceptions. Additionally the majority of scripts are designed to be usable from within the NinjaOne NinjaRMM product, which allows for very easy deployment of PowerShell scripts with either Script Variables (via a form filled out at runtime that translate to environment variables), Parameters (from the command line, or at script runtime as a string), or via Custom Fields that can be defined per organization, location, or device (or as a part of NinjaOne Documentation) to provide information that varies automatically at script runtime that's saved in the system. Because this data is loaded via standard methods (parameters or environment variables), the scripts can either be used with zero to minimal modification in many other Remote Monitoring and Management (RMM) tools.

Idempotency and Recriprocity

What the heck are thees? I try to write scripts with these mind, but they're fancy words for simple concepts.


Idempotence is any function that can be executed several times without changing the final result beyond its first iteration. Ideally, if you run a script repeatedly, it will only make the change necessary to get to the correct end state, regardless of how many times it's run. If it's installing software, the software should only be installed if it's not already installed, for example, rather than wasting bandwidth and processing power reinstalling the same software over and over.


Opposite functions being equally available. If a script can install software, it should ideally be able to undo this operation and uninstall or remove it! Sometimes two functions are a part of the same script and sometimes there are separate installation and removal scripts, but my goal, when possible, is to be able to undo or remove things relatively easily after making changes. Occasionally this doesn't make sense or isn't worth the effort for some changes, but those exceptions should be well-considered and not the default.


You're still here? It's over. Go home.

Ferris Bueller notwithstanding, thanks for sticking with me this far, future posts may have more substance. I make no guarantees!