Skip to content

Releases: DevPossible/PowerStub

PowerStub v2.4.0

Choose a tag to compare

@devpossible-richard devpossible-richard released this 08 Oct 13:41

PowerStub 2.4.0

  • PowerStub now tells you when a newer release is on the PowerShell Gallery: A newer version of PowerStub is available (<latest>, you have <installed>). Run 'Update-Module PowerStub' to install it.
    • Checked at most once a day, in a hidden background process, so commands never wait for it. The notice appears on a later run, once per PowerShell session.
    • Only copies installed from the Gallery are checked. Git is not needed.
    • Set ReleaseCheckIntervalHours in the config file to change the interval, or to 0 to turn it off. POWERSTUB_NO_UPDATE_CHECK, CI jobs and -NonInteractive sessions also turn it off.
  • The stub command list shows alpha and beta commands first, marked * name instead of name *.

Whats Changed

  • fix(commands): list pre-release commands first with a leading marker
  • feat(git): notify daily when a newer PowerStub release is on the Gallery

Full Changelog: v2.3.0...v2.4.0

PowerStub v2.3.0

Choose a tag to compare

@devpossible-richard devpossible-richard released this 06 Oct 03:29

PowerStub 2.3.0

  • New Add-PowerStubToProfile command: makes PowerStub load in every new session. It replaces the README's old Add-Content $PROFILE "nImport-Module PowerStub"` step, which failed when the profile folder did not exist and could add a line that never ran (for example after a trailing line-continuation backtick).
    • Creates the profile file and its folder when needed.
    • Writes to $PROFILE.CurrentUserAllHosts by default, so the console, Windows Terminal and VS Code all load PowerStub. Pass -Path $PROFILE for the current host only.
    • Adds Import-Module PowerStub for a PowerShell Gallery install, or an import of the exact manifest path for a source or archive install.
    • Safe to run again: does nothing when the profile already imports PowerStub.
    • Changes nothing when the profile has syntax errors or the new line would not run as its own statement. Keeps the file's encoding and writes through symbolic links. Supports -WhatIf.
  • New Remove-PowerStubFromProfile command: removes the lines that import PowerStub from a profile, including ones added by hand. An import that shares a line with other code is left in place with a warning.

Whats Changed

  • feat(config): add Add-PowerStubToProfile and Remove-PowerStubFromProfile

Full Changelog: v2.2.1...v2.3.0

PowerStub v2.2.1

Choose a tag to compare

@devpossible-richard devpossible-richard released this 06 Oct 02:43

PowerStub 2.2.1

  • Running a stub command no longer prints Invoking <command file> every time, which flooded the console when commands were called in loops. The line is now verbose-only: pass -Verbose to the command (it still reaches the command too) or set $VerbosePreference = 'Continue', and PowerStub writes VERBOSE: Invoking <command file>.
  • Output through pstb and direct aliases now matches a direct call record for record, with no extra information-stream line.

Whats Changed

  • fix(commands): show the Invoking line only in verbose mode

Full Changelog: v2.2.0...v2.2.1

PowerStub v2.2.0

Choose a tag to compare

@devpossible-richard devpossible-richard released this 06 Oct 02:20

PowerStub 2.2.0

  • New Start-PowerStubJob command (alias Start-PstbJob): a drop-in replacement for Start-Job in which pstb, Invoke-PowerStubCommand and your direct aliases work. Start-Job alone cannot run them, because a background job does not load your profile, so a job that called a direct alias failed with The term 'rdeploy' is not recognized.
  • It takes exactly the same parameters as Start-Job, and imports the same PowerStub module and settings your session is using before the job runs. $using: variables (including function and script locals), pipeline input, -ArgumentList, -FilePath and your own -InitializationScript all work as they do with Start-Job.
  • It works from inside stub commands, for example a script that runs one health check per service in parallel jobs.
  • Windows PowerShell jobs (-PSVersion 5.1) are refused with a clear error, because PowerStub needs PowerShell 7.
  • See "Background Jobs" in the README.

Whats Changed

  • feat(jobs): add Start-PowerStubJob for PowerStub commands in background jobs

Full Changelog: v2.1.2...v2.2.0

PowerStub v2.1.2

Choose a tag to compare

@devpossible-richard devpossible-richard released this 06 Oct 01:13

PowerStub 2.1.2

  • A stub command can now run another stub command, through pstb or a direct alias. Before, the inner call failed with Sync-PowerStubConfiguration: Cannot index into a null array., because the outer script ran inside PowerStub's own module scope and hid PowerStub's settings while it ran.
  • Commands now run outside PowerStub's module scope. Exit codes, $?, &&/|| chains and output streams behave as before.

Whats Changed

  • fix(commands): run targets outside the module session state

Full Changelog: v2.1.1...v2.1.2

PowerStub v2.1.1

Choose a tag to compare

@devpossible-richard devpossible-richard released this 06 Oct 00:50

PowerStub 2.1.1

  • Listing a stub's commands (pstb <stub> or a bare direct alias) is fast again: a 49-command stub took over 15 seconds and now takes well under a second. Synopses are read straight from each script's help block instead of through Get-Help with a wildcard pattern, which searched every command and help topic on each call.
  • pstb search is faster for the same reason, and pstb help no longer pays the wildcard search cost for ordinary file names.
  • Scripts without a help block now show - in command listings, instead of a generated syntax line.

Whats Changed

  • fix(commands): read command synopses without wildcard Get-Help

Full Changelog: v2.1.0...v2.1.1

PowerStub v2.1.0

Choose a tag to compare

@devpossible-richard devpossible-richard released this 05 Oct 23:45

PowerStub 2.1.0

  • Running a command from a stub in a Git repository now tells you when that repository is behind its remote: You do not have the latest version of 'DevOps' (3 commit(s) behind). Run 'pstb update DevOps' to get the latest version.
  • The check never slows commands down. It runs git fetch in a hidden background process at most every 4 hours per stub, and the result is shown on a later run, once per repository per session.
  • Set UpdateCheckIntervalHours in the config file to change the interval, or to 0 to turn it off. Setting the POWERSTUB_NO_UPDATE_CHECK environment variable also turns it off. CI jobs and -NonInteractive sessions are never checked.
  • Nothing changes when Git is not installed, when Git integration is disabled, or for stubs outside a Git repository. Stubs inside and outside repositories can be mixed.

Whats Changed

  • fix(release): update repository and package links for PowerStub rename
  • feat(git): notify when a stub's repository is behind its remote
  • test(git): name the branch in update check fixtures

Full Changelog: v2.0.3...v2.1.0

PowerStub v2.0.3

Choose a tag to compare

@devpossible-richard devpossible-richard released this 04 Oct 23:46

PowerStub 2.0.3

  • Command listings now have two aligned columns, Command and Synopsis, without the stray dash from the unnamed prerelease column.
  • Enabled alpha and beta commands display * after the command name. Sorting still uses the unmarked command name.
  • The same formatting applies to pstb <stub> and direct aliases, including aliases restored in a new PowerShell session.

Whats Changed

  • fix(commands): align command table headers and prerelease markers
  • docs(release): describe command table alignment fix

Full Changelog: v2.0.2...v2.0.3

PowerStub v2.0.2

Choose a tag to compare

@devpossible-richard devpossible-richard released this 04 Oct 23:18

PowerStub 2.0.2

  • Direct aliases invoked without arguments now show the same command table as pstb <stub>, sorted by command name with summaries from .SYNOPSIS headers, instead of returning a directory listing.
  • Scripts without recognized help headers show - instead of generated file names or parameter syntax. Executables continue to use their metadata synopsis.
  • Existing prerelease visibility, command execution, and failure-status behavior are retained.

Reload the updated module with Remove-Module PowerStub; Import-Module PowerStub to recreate saved direct aliases with the fixed behavior.

Whats Changed

  • fix(commands): preserve target failure status through command proxies
  • fix!: reject alias collisions even with -Force
  • fix: honor literal paths and installed configuration contracts
  • test: compare direct aliases across the native parsing matrix
  • fix(git): distinguish unavailable status and failed updates
  • fix(release): verify staged packages and constrain publication gates
  • fix(commands): resolve literal files without wildcard lookalikes
  • fix(help): share exact file patterns with command discovery
  • test: isolate alias discovery and accept Windows line endings
  • Fix direct alias command listing to show sorted help table
  • fix(alias): integrate command tables with current release helpers

Full Changelog: v1.2.0...v2.0.2

PowerStub v2.0.1

Choose a tag to compare

@devpossible-richard devpossible-richard released this 04 Oct 21:04

PowerStub 2.0.1

Fixes and upgrade guidance

  • Relative registration paths are saved as absolute filesystem paths; literal bracket characters work in tool and configuration paths. Existing registrations are retained. If an older registration contains a relative path, re-register it from the intended directory with New-PowerStub -Name <name> -Path <path> -Force.
  • Stub names help, search, and update are rejected because they are built-in commands. Register affected tools under another name. Existing configuration is not silently renamed.
  • A free, configured invocation alias is exported by normal manifest imports. Direct aliases still cannot replace existing commands, including when -Force is supplied (the 2.0 safety change).
  • Invalid top-level configuration data is preserved in a corrupt-file backup and ignored. A failed Git fetch is reported instead of claiming that a repository is current.
  • Installation, configuration, Git-check, and contribution instructions now match the exported API. PowerShell 7.0+ is required. GitHub ZIP downloads are source archives with a nested module folder; the Gallery package is separately version-stamped.
  • Gallery staging now includes the Apache license text and README, verifies the installed manifest in a fresh process, and waits for successful GitHub mirroring. GitLab test reports use JUnit XML. Duplicate-release responses are verified by exact tag rather than treating every HTTP 422 as success.

Native argument limitations

The 15 shared native argument mismatches and two additional Linux quoted-glob mismatches remain explicit known issues. Both pstb and direct aliases have the same function-boundary limitations. Quote '--', colon-form flags, and comma-containing values where appropriate. For exact native parsing, including quoted globs and caller-local native argument-passing preferences, invoke the resolved path directly:

& (Get-PowerStubCommand -Stub Tools -Command tool).Path <native arguments>

The matrix now also compares direct aliases and tests this resolved-path workaround against all 17 audited inputs. This release does not claim universal native transparency. See the README's Argument behavior section for details.

Validation scope

The active release pipeline runs Linux. It gates the passing matrix cases, installed-package smoke checks, documentation examples, and offline release-response cases. A Windows runner is not enabled by this change; Windows validation and the PowerShell 7.0 minimum still need separate execution. No new GitHub status integration or release ZIP asset is implied.

Whats Changed

  • fix: honor literal paths and installed configuration contracts
  • test: compare direct aliases across the native parsing matrix
  • fix(git): distinguish unavailable status and failed updates
  • fix(release): verify staged packages and constrain publication gates
  • fix(commands): resolve literal files without wildcard lookalikes
  • fix(help): share exact file patterns with command discovery
  • test: isolate alias discovery and accept Windows line endings

Full Changelog: v2.0.0...v2.0.1