PsUi

1.1.1

WPF toolkit for PowerShell. DSL-based controls, async execution, theming. No XAML.

Minimum PowerShell version

5.1

Installation Options

Copy and Paste the following command to install this package using PowerShellGet More Info

Install-Module -Name PsUi

Copy and Paste the following command to install this package using Microsoft.PowerShell.PSResourceGet More Info

Install-PSResource -Name PsUi

You can deploy this package directly to Azure Automation. Note that deploying packages with dependencies will deploy all the dependencies to Azure Automation. Learn More

Manually download the .nupkg file to your system's default download location. Note that the file won't be unpacked, and won't include any dependencies. Learn More

Owners

Copyright

(c) 2026 Jacob LaBonte. All rights reserved.

Package Details

Author(s)

  • Jacob LaBonte

Tags

GUI Windows WPF Dialog DataGrid DSL Theme Async

Cmdlets

New-UiWindow

Functions

Add-UiDataGridItem Add-UiListItem Clear-UiDataGridItems Clear-UiList Clear-UiStatus Close-UiWindow Get-PsUiIcon Get-PsUiIconFont Get-PsUiIconList Get-UiListItems Get-UiSession Get-UiThemeTemplate Get-UiValue Hide-UiStatusBar Invoke-UiAsync New-UiAction New-UiActionCard New-UiButton New-UiButtonCard New-UiCard New-UiChart New-UiChildWindow New-UiColumn New-UiCredential New-UiDataGrid New-UiDatePicker New-UiDialogButton New-UiDropdown New-UiDropdownButton New-UiExpander New-UiGlyph New-UiGrid New-UiHeaderAction New-UiImage New-UiInput New-UiLabel New-UiLink New-UiList New-UiMenuItem New-UiPanel New-UiProgress New-UiRadioGroup New-UiResultAction New-UiSeparator New-UiSlider New-UiSpacer New-UiStatusBar New-UiTab New-UiTextArea New-UiTimePicker New-UiToggle New-UiTool New-UiTree New-UiWebView Out-CSVDataGrid Out-Datagrid Out-TextEditor Register-UiHotkey Register-UiTheme Remove-UiListItem Reset-UiSession Set-PsUiIconFont Set-UiCapturedVariable Set-UiDataGridItems Set-UiProgress Set-UiStatusBar Set-UiValue Show-UiChoiceDialog Show-UiConfirmDialog Show-UiCredentialDialog Show-UiDialog Show-UiFilePicker Show-UiFolderPicker Show-UiGlyphBrowser Show-UiInputDialog Show-UiMessageDialog Show-UiOuPicker Show-UiPromptDialog Show-UiSaveDialog Show-UiStatusBar Show-WindowsObjectPicker Stop-UiAsync Test-PsUiIcon Update-UiChart Write-Status Write-UiHostDirect

PSEditions

Desktop Core

Dependencies

This module has no dependencies.

Release Notes

Version 1.1.1:
- Implicit window: call a control with no New-UiWindow around it and PsUi reads the script for
 the statements that build controls, then puts a window around them titled after the file.
- Get-UiSession is exported, and resolves outside a window.
- Functions that standin for the five parameters that took nested hashtables: New-UiMenuItem,
 New-UiResultAction, New-UiDialogButton, New-UiColumn, New-UiHeaderAction. Keys are real
 parameters with tab completion and Get-Help. The legacy hashtable form still binds.
- -Sync is now -NoAsync on New-UiColumn and New-UiMenuItem, matching New-UiButton. The old
 spelling still binds as an alias.
- -WPFProperties attached properties ('Grid.Row', 'DockPanel.Dock') apply instead of being
 silently skipped, and string values convert to the target type. Tag is refused with a
 warning on a control that already holds one.
- Set-UiValue and Get-UiValue work from async actions again, and the session store now beats
 a same named variable that was in scope when the button was built.
- Chart fixes: -Width and -Height reach the chart, a single point draws on bar, line, pie and
 the legend, and a custom -LabelProperty no longer empties the data.
- New-UiButton -Parameters splats on a sync click, and -Width under 16 no longer crashes.
- New-UiWebView: a throwing navigation callback warns instead of taking the window down,
 -OnNavigating cancels only on a real $false, and the view stops oversizing the window or
 drawing over the title bar.
- A control inside a card, tab or expander could vanish without a warning.
- Dialogs opened before any window drew their inputs with no border or fill.
- New-UiProgress -Severity gave every bar the accent blue.

Version 1.1.0:
- DataGrid overhaul: New-UiDataGrid as an embeddable grid, cell-embedded Button/Toggle/Link
 controls, opt-in editing, RowDetailsTemplate, RowBackground, FrozenColumns, EmptyMessage,
 RowContextMenu, SanitizeFormulas. Add-/Set-/Clear-UiDataGridItems helpers for mutating
 the backing collection from button actions.
- -ItemsSource binds your variable: pass a plain ArrayList / List / ObservableCollection and
 PsUi wraps it in a threadsafe observable list, then rebinds the variable so
 $list.Add() lands in the grid without [ref] usage. -NoBind opts out.
- Status bar suite: New-UiStatusBar + companion functions. -Intercept routes Write-Warning
 and Write-Error to badge counters; -AutoProgress embeds a progress bar driven by
 Write-Progress; -CaptureHost routes Write-Host to status text. Severity tinting with
 indicator glyphs; popup detail views on the badge counts.
- Icon font picker: Set-PsUiIconFont / Test-PsUiIcon. Pick Segoe MDL2 Assets or Segoe Fluent
 Icons per session or per window. Auto-detect, fallback chain, 125 new Fluent-modern names
 in CharList.json.
- New-UiTree: -ParentCheckBoxes and -ChildCheckBoxes for AD-style pickers, cascade defaults
 on, -NoCascade opts out, -WhenEnabled / -Checked for per-item rules.
- -Fill on data controls and New-UiGrid (replacing -FillParent; legacy alias kept).
- New-UiTool: UserPicker, GroupPicker, MemberPicker, OUPicker helpers; -HelperOptions connects
 helper buttons to other controls; helper-button errors surface in themed dialogs.
- Out-TextEditor / Out-CSVDataGrid theme inheritance fix (standalone calls no longer flip
 the parent window's theme).
- AsyncObservableCollection: cross-thread reentrancy fix, second-window dispatcher fix,
 seed-from-IEnumerable constructors, AttachMirror for two-way collection sync.
- net452 target alongside net472 and net6.0-windows for WinPE / older Windows.
- New-UiWindow -Theme Auto is now the default (follows the system light/dark preference).

Version 1.0.4:
- PsUi.psm1: Import-Module -Force no longer wipes static state out from under live windows
- New-UiTree: dotted property paths (e.g. 'Manager.Name') now walk into child objects instead
 of being read as one literal property name (also IdProperty, PathProperty, DisplayProperty)
- New-UiTree: path-mode parent nodes carry a stand-in tag so click handlers always have
 something to read; gets promoted to the real item if a matching piped item arrives later
- New-UiTree: replaced broken Get-Process help example with one that works on PS 5.1 and 7+
- Dropped dead VirtualizingPanel setters from the tree style

Version 1.0.3:
- Fix -EnabledWhen dispatcher error on TextBox/PasswordBox controls (GitHub #3)
- Fix tab content clipping when content overflows the window height
- Auto-size windows now scroll properly when MaxHeight is reached

Version 1.0.2:
- Add -EnabledWhen to 6 controls (Button, Input, TextArea, Dropdown, Tab, Action)
- New-UiTextArea: -ReadOnly switch
- Batch variable injection for faster window startup

Version 1.0.1:
- New-UiButton: -ScrollToTop switch for controlling post-completion scroll position
- New-UiTool: Detect missing help files in PS 7+, offer online docs fallback
- Show-UiFilterBuilder: Fix combobox vertical centering
- CI: Add Pester test workflow

FileList

Version History

Version Downloads Last updated
1.1.1 (current version) 15 9/29/2026
1.1.0 86 8/10/2026
1.0.4 132 5/1/2026
1.0.3 87 4/19/2026
1.0.2 12 4/19/2026
1.0.1 14 4/18/2026
1.0.0 58 4/17/2026
Show more