Real-World Examples

Hello! I’m trying to collect some real-world examples of what folks are using PSU for to put on our website. I get a lot of questions about what to actually use PSU for since it has a lot of features.

If you’re willing to do so either on this thread or via DM, I’m all ears. I can include as little or as many details as you want (company, name, job title, etc). I’d love screenshots but realize that’s not always possible.


@adam I always felt this would be beneficial as a way to provide inspiration to others and to sell the product. My son has a really cool dashboard for the local police department and he encouraged me to look at Universal.

I’ve only been using it for a few months and here are two dashboards I currently have running at the office.

Server Dashboard

Clicking on any of the donut (doughnut) charts will bring up a separate page providing a table of the items and some of these have actions that can be perform. Here is an example of the VM Snapshot Status with an action to delete a snapshot.

Another item I’m releasing in the coming days is a tool for managers to handle contractor accounts around our policies for these accounts.

Contractor Account Management

Managers can extend (modify end date) accounts, reassign to another manager, request new accounts, or disable accounts. They can also filter the accounts by clicking different segments of the donut chart. Here is a view of the add request form (clicking Add).

The request form is not using New-UDForm as it didn’t provide the look and feel I desired.

I hope these are helpful for others.


Thanks! This is extremely helpful!

Not to hi-jack the post, but how did you build the form without new-udform?

1 Like

I simply created a modal (Show-UDModal) and added all of the components necessary to make the form, to include New-UDGrid (for layout), New-UDTypography (for form field labels), New-UDDynamic (for the red asterisk on the form field labels), New-UDElement and New-UDStyle (for spacing and styling), New-UDButton (Submit, Cancel, Clear), and of course New-UDTextbox, New-UDRadio, New-UDSelect, and New-UDAutoComplete for collecting inputs.

The biggest reason I didn’t use New-UDForm was that I wanted an indicator showing required forms and to dynamically change that indication. Therefore, I used New-UDTypography for the form field labels and then New-UDDynamic to add the red asterisk. When clicking submit but leaving a required field empty, I change the asterisk to REQUIRED as part of my button’s on click event. Additionally, I wanted a cancel and clear button on the form and adding one to an existing New-UDForm was clunky.

For reading the data, I simply build an custom object from the values of each field, run it through a validation, and then handle results as needed as part of the on click event.

Hope that helps.


Here is part of a “utilities” website/dashboard that allows users to run SQL Jobs that are maintained by d/b admins who are not proficient in PowerShell.

It’s a single .ps1 page in PSU that targets different SQL Agent Jobs based on the URL parameter.

One of these processes (screenshots below) requires running 5 separate SQL jobs in order (yes yes because “reasons” the users need to control the running and timing of each step). Each “UD-Chip” across the top is a SQL Job which reloads the “Job” tab reading in the SQL Job information like “Description” and each “job step”. The UD-Chips are either black when they haven’t been run for the day yet, red if the job previously failed or green when complete for that day.

(showing UD-Chip 3 and how each job step is shown matching the job steps from the sql job)

Upon clicking the “Run” button a confirmation modal pops up, and after clicking “Start” a broadcast message is sent out to all users, as well as updating/syncing the SQL Job info table and button states across all users who have the page open (this means if person A starts a job while person B is also looking at the same job info table, person B will be informed that the job has started and the “Run” button will be disabled for everyone)


(showing UD-Chip 1 - halfway through the sql job at job step 3)

While running, the job info table updates as each step is completed so the users can monitor what the SQL Job is doing.

Once complete a broadcast message is sent to all users, and the job info table updated to allow it to be run again if required (and the UD-Chip updates for this day)

(UD-Chip 1 complete, job info table resets, users can see last time the job was run)

This allows us to only give access to run the SQL jobs to the PSU service account.

We’re logging when each user runs a SQL job from PSU into a SQL Lite d/b (timestamp, username, ip etc) and display access to that for admins using a simple UD-Table.


Great idea. I have been looking for real-world examples myself a lot. For inspiration as well as education!

I’ll write a fairly detailed report of what I’ve created . As sort of a token of appreciation! PSU has benefited me in a lot of ways so far. I’ll finish/post the write-up Thursday or Friday.

1 Like

Hello Adam,
Here is a Nutanix VM creator / remover dashboard.
This page hooks into the Nutanix Powershell module and creates a form dynamically from the data from within the Nutanix system. So should new networks or clusters get added to Nutanix etc they will appear as options. Also is the ability to schedule a two stage removal of said systems with the options to create a Veeam backup and shutdown before a second schedule creates a removal and cleanup of all the meta data across the domain. Schedules can also be removed if needed.



I work for a relatively small MSP, so our environments are quite diverse.
I am a sysadmin, co-functioning as “tech lead / escalation filter” for our helpdesk/tier 1 support. If one of them have technical questions, they should generally come to me first.
If I can’t help, I make sure they escalate the issue to the correct tech/department/contact.

PSU has resparked my interest in PowerShell, and throughout the past couple of months I’ve built various tools with it for a multitude of reasons. Such as:

  • To automate recurring tasks, as well as easing the “learning curve” for our helpdesk i.e. helping them understanding troubleshooting steps through a simplified interface.
  • To avoid mistakes
    • Example: On/offboarding processes vary greatly among our clients. Hybrid (Exchange) environments were particulary prone to human errors. Automating these tasks avoids errors as well as improving client satisfaction.
      • These scripts/dashboards are not included in this post, but if anybody is interested I’ll try to post them as soon as I find them satisfactory.
  • To avoid recurring questions (for both myself and my colleague’s)
  • To save time
    • This goes a couple of ways. Our company generally bills by the quarter of an hour at minimum;
      • We can still bill the time spent as we did before, but now the task takes us only a couple of clicks. (Business is business)
      • Some of our clients are billed a fixed price per user per month, so the time saved still benefits us.
  • To improve my own PowerShell skills / to teach myself / to teach others
    • I gotta be honest… I thought I was pretty proficient with PowerShell/automation, but PSU has humbled me in the best of ways. The last couple of months, I’ve learned more by slowly expanding PSU than any other PowerShell-related project so far.


  • Client-specific credentials are managed through the PSU Secret store.
  • Client-specific parameters/information that’s more ambiguous is managed through the PSU API with JSON files.
  • Authentication is all done through Azure AD/OIDC with DUO MFA, and AppTokens.

Anyways, here’s the current main dashboard for our helpdesk. I’ll summarize all the tools:

1. PassGen / Send SMS
- Custom password-generator for multiple languages
- Custom syntax to make the passwords user friendly yet complex enough for most systems / password requirements
- (OPTIONAL) Send the generated password to the user by SMS after verification by phone

2. Custom SMS
- Send a SMS with a custom multiline message

3. VM Host lookup
- Oftentimes our tier 2 needs to expand VM resources when our monitoring notifies. This form finds the required VM, and associated host.
- Back in the day we manually clicked through the list of hosts, but we have too many hosts to do that now…

4. DNS Lookup
- Basically a form around Resolve-DnsName. Pops up a modal with some options such as SPF syntax validation. This is mainly used for SPF records.
- Going to add some features to this such as a check for max. DNS lookups (RFC7208)

5. DNS Lookup for our main domain/DNS registrar
- Uses the API of our registrar. Working on some tools to make direct changes without using their control panel.
- Also working on a module to easily copy/transfer DNS zones between this provider and Azure… For failover reasons…

6. ASB/PBX Lookup
- We manage hosted VOIP servers and admin panels. This is to find which server/panel a client is hosted on. (Our provider is working on their own tool, which will be better)

- Basically a WHOIS wrapper for IP address lookups at multiple RIR’s. This is mainly used to see if an IP address is managed by us, or to see where a visiting IP address is from.

8. SSL-Certs
- Multiple custom tools/options for SSL-Certificate management through our main registrar’s API
- Has some custom options for ease-of-use; mainly for certificate management on our webservers

Some of the forms/code are mixed language-wise (NL/EN). I know.

I’ll post some of the code later, as I’m sure there are a lot of improvements to be made in my code, as well as in my (general) way of doing things.
So if anybody has any pointers or questions, I’d be happy to hear them.

Special thanks to Adam and the rest of Ironman Software for building this “suite”, and building/improving the (PowerShell/Windows/Sysadmin) community.
I’d love it for you guys to teach me some things on a more personal basis sometime.

Thanks so far.



All I can say to everyone is :heart_eyes: and thank you! You are building some amazing things!

1 Like

We decided to remove administrative rights from our monitoring application (LogicMonitor), but wanted to retain the ability to query for performance and system configuration data that require administrative rights to access (in Windows).
We use PowerShell Universal to provide an API for LogicMonitor to proxy any queries that need administrative rights to query a monitored resource. Instead of directly accessing the monitored resource to ask it something (usually by running a script or querying WMI), we have it use a PU API call running under elevated permissions to handle the query. This way LogicMonitor never has direct access to administrative credentials.


I dont have any fancy dashboards to share but our organization has been using PSU for a few years now and we have been really focused on using the endpoints/APIs to tie into our ticketing system to automate processes.

We currently use APIs to call various scripts to perform the following tasks

  • On/Off boarding
    • Hooking into various other 3rd party APIs such as Azure AD.
  • Permission requests (AD group memberships)

We also have some simple dashboards with UDForms that allows techs (helpdesk) to run various scripts.

PSU has matured so much over the last year or so and I look forward to seeing how much it will continue to grow!


New guy here.
My first dashboard allows me to pause alarms from PRTG utilizing the PrtgAPI in set intervals. This can be done even though I don’t have write permission to the PRTG core server which normally is needed.

Its really simple.

Also a big thanks to this forum and some particular members that has been very helpful


This is a really cool thread, I feel dumb posting my examples after seeing the awesome stuff here.

Just getting back into PSU now but will be using for some self service stuff and to help co-coworkers who are not familiar\confident enough with PowerShell to just run scripts.

Hope to add some examples soon @adam, you have helped me so much in the past and now as well its all I can do to try and give back…well beside getting my current company to buy a license!

1 Like

Would love to see the code for this, cool stuff. I haven’t read through the entire post so maybe Adam posted somewhere already…


1 Like

yeah it would be really helpful to be able to get the code behind all these dashboars/scripts. It would help alot with learning the stuff.

@phunky1 @Peter1 I posted a bunch of the code here: Broadcast update dynamic sections - #6 by pharnos (there might be something in there you can use?)


We use PSU (currently migrating to PSU from v2.9 UD) to provide a frontend to our SaaS solution which is used by our customers - standalone and MSPs who can manage their own customers through the portal, as a platform for management, monitoring, optimisation and governance for their cloud environments.

The backend is all azure automation and the frontend provides a self-service portal for customers to install the product, view automated optimisation recommendations, download their automated documentation, view an overview of the service, build out new environments and much more!

If it’s of any use I’m happy to write up a case study which goes into more detail.
Once we’re fully moved over to PSU I’ll definitely be using APIs and some of the built in automation to allow our customers to run API calls to kick off documentation runs and various other cool things. Looking forward to getting stuck into that!


This gave me a lot of motivation to get started on something similar for our PRTG servers. Currently running in beta for a small group of our servicedesk engineers and thus far the feedback has been great.

Thanks for the inspiration by sharing this!

Let me know if you need any of the code behind the dashboard

Since I wrote last I have implemented 3 new features:

  1. Ability to unpause an object
  2. Autocomplete search for devices (Its a must have!)
  3. Update the autocomplete list with a click - list is updated every 8 hours, but if a newly added needs to be paused we can initiate an list update with a single click

1 Like