SkillAgentSearch skills...

PSToolset

Set of tools for Powershell environment

Install / Use

/learn @microsoft/PSToolset
About this skill

Quality Score

0/100

Supported Platforms

Universal

README

The purpose and state of the repository

This module represents a set of tools for Powershell that I find useful to have available in every Powershell console. It was started as a helper project for some daily work activities and polished over the years as an internal project. Some recent commands rely on Powershell 7 syntax, so the module is marked for Powershell 7, although most of the commands actually should work in older Powershell versions.

You are welcome to use and contribute.

Installation

To make the module auto-discoverable by Powershell, clone it into your Powershell Modules folder without changing it's name:

$modulesFolder = $env:PSModulePath -split ";" | select -f 1
mkdir $modulesFolder -ea Ignore
cd $modulesFolder
git clone https://github.com/microsoft/PSToolset

Powershell should be able to discover module commands after that. If it doesn't you can import the module explicitly

Import-Module PSToolset

Documentation

List all exported commands from the module:

Get-Command -Module PSToolset

Get detailed help for a particular function:

man Set-CmdEnvironment -Detailed

Get examples for a particular function:

man Show-Highlight -Examples

See implementation details in color:

source construct

Source output

Commands

Colors

Name | Alias | Description -----|-------|------------- Get-Colors | | Print all console host colors to the console in color Get-Source | source | Print source code of a command or script in color Show-Highlight | hl | Highlight portion of some text to make it visually easier to find something in the text Write-Colorized | | Output object to stdout with specific color

Data

Name | Alias | Description -----|-------|------------- ConvertFrom-Ini | | Converts ini strings into Powershell hashtable object ConvertTo-Hash | | Convert an object into a hash table ConvertTo-PsObject | construct | Convert a set of variables into a PsObject Get-Ini | | Parse INI file as a hashtable object Get-Parameter | | Get names of all available parameters from input objects Import-Ini | | Imports ini file into Powershell hashtable object Show-Ini | | Print contents of INI parsed file, received from Get-Ini command Use-Filter | f | Regex based parameter filter for input objects Use-Project | p | Project several parameters from input objects

Files

Name | Alias | Description -----|-------|------------- Get-FileEncoding | | Gets file encoding Resolve-ScriptPath | | Resolve path that is local to the script

Functional

Name | Alias | Description -----|-------|------------- Get-First | first | Returns first element in the piped in input that confirms to the condition Get-Last | last | Returns last element in the piped in input that confirms to the condition Get-Median | | Calculate median of numeric array piped in Get-Randomized | | Randomize a sequence that is piped in Get-Reverse | | Reverse a sequence that is piped in Get-Separation | separate | Separate collection into two based on some condition Get-UniqueUnsorted | | Get unique values from an unsorted array Test-All | all | Test if all elements in the piped in input confirm to the condition Test-Any | any | Test if any element in the piped in input confirms to the condition

Git

Name | Alias | Description -----|-------|------------- Get-CommitAuthorDate | | Get author commit date from a git commit Get-CommitAuthorEmail | | Get author email from a git commit Get-CommitAuthorName | | Get author name from a git commit Get-CommitMessage | | Get commit message from a git commit Initialize-GitConfig | | Configure git before the first use; assigns name and email for the current user and sets up some useful defaults Open-GitExtensions | gite | Open GitExtensions GUI frontend, by default browse window in the current folder would be opened

Python

Name | Alias | Description -----|-------|------------- Start-JupyterNotebook | jn | Start Jupyter Notebook in current folder or $env:DefaultJupyterNotebookPath. Reuse existing notebook already running if possible Stop-JupyterNotebook | | Stop all Jupyter Notebooks running

Security

Name | Alias | Description -----|-------|------------- Invoke-Elevated | | Invoke script in elevated Powershell session Set-DelayLock | lock | Lock machine after the specified timeout Test-Elevated | | Test if current Powershell session is elevated Test-Interactive | | Determine if the current Powershell session is interactive

Text

Name | Alias | Description -----|-------|------------- Format-Template | | Render text template Get-UnresolvedTemplateItem | | Find template items that were not resolved yet Use-Default | default | Define default value if input is null, false or missing Use-Parse | parse | Parse incoming text to find relevant pieces in it

Utils

Name | Alias | Description -----|-------|------------- Set-CmdEnvironment | call | Call .bat or .cmd file and preserve all environment variables set by it Use-Retries | | Retry execution of a script that throws an exception

Xml

Name | Alias | Description -----|-------|------------- New-XAttribute | xattr | Create XAttribute object with specified name and value New-XComment | xcomm | Create XComment object with specified value New-XElement | xelem | Create XElement object and attach specified via script blocks other XObjects in a hierarchal form New-Xmlns | xmlns | Create Xmlns object with specified namespace and value New-XName | xname | Create XName object with specified name

How to regenerate table of exported commands


Import-Module PSToolset
$functions = get-module pstoolset | % ExportedFunctions | % Keys
$aliases = get-module pstoolset | % ExportedAliases | % Keys
$map = @{}

foreach( $function in $functions )
{
    $map.$function = @{}
    $map.$function.Name = $function
    $map.$function.File = gi (ls function: | where Name -eq $function| % ScriptBlock | % File) | % BaseName

    $map.$function.Description = man $function | select -skip 5 -First 10 | % Trim
    $map.$function.Description = foreach( $line in $map.$function.Description )
    {
        if( -not $line ){ break }
        $line
    }
    $map.$function.Description = $map.$function.Description -join " "
}

foreach( $alias in $aliases )
{
    $function = get-alias $alias | % ResolvedCommand | % Name
    $map.$function.Alias = $alias
}

$parsed = $map.Keys | %{ [PsCustomObject] $map.$psitem }
$groups = $parsed | group File

$table = foreach( $group in $groups )
{
    "## $($group.Name)"
    "Name | Alias | Description"
    "-----|-------|-------------"
    foreach( $element in $group.Group | sort Name )
    {
        "$($element.Name) | $($element.Alias) | $($element.Description)"
    }
    ""
}
$table | clip

"Table is saved to Windows clipboard"

Related Skills

View on GitHub
GitHub Stars45
CategoryDevelopment
Updated2mo ago
Forks13

Languages

PowerShell

Security Score

75/100

Audited on Jan 10, 2026

No findings