A PowerShell Input Tool

In PowerShell, the primary means to get interactive input from a user is with the Read-Host cmdlet. There’s nothing wrong with it but sometimes if you are using it in a graphical tool like the PowerShell ISE or VS Code you may not realize you are being prompted. Or perhaps you are building some other type of PowerShell-based tool where you would like something other than a console-based prompt. I thought I’d give a sneak peak at a function I will be adding to my PSScriptTools module that creates a graphical inputbox using WPF.

In the past, you’ve probably written PowerShell code to use generate a VBScript style input box. I know I have several versions. When I wrote them they worked just fine. They still “work” but today with very high resolution monitors, I’m currently running a 4K monitor, anything that uses Windows Forms doesn’t scale well. WPF on the other hand is designed to automatically scale and adjust. It doesn’t care that I’m running a 4K screen.

The function I wrote, called Invoke-InputBox, works the same was as Read-Host. You can specify a prompt, enter something and the command writes it back to the pipeline. Although since this is a form, you can also specify a title.  Here is the form with default values.

image

Pressing OK will write the value in the text box to the pipeline and assign it to $p. I also added a parameter so that you can enter a secure string.

image

I went “quick and dirty” and created a simple WPF form using a stack panel. There’s no messy xaml. I think the code is pretty straightforward. I’ll share the current version here, but look for it to eventually appear in the PSScriptTools module.

Because the function uses WPF, it will not work in PowerShell Core. In the meantime I hope some of you will try it out and let me know what you think.

One thought on “A PowerShell Input Tool

  1. This is perfect. I have been looking for a simple dialog box .

    I have a script that automates the creation of custom SharePoint web applications and site collection. Currently I ask for the information at the command line which can be confusing for some admin who are not familiar with powershell.

    I will try this out and let you know.

    Thanks

Leave a Reply

Your email address will not be published. Required fields are marked *