A collection of PowerShell profile tools providing a unified package manager abstraction, module auto-loading, Bing search, Oh-My-Posh setup, and developer utilities across Windows, Linux, WSL, and macOS.
docs 🏗️
- Clone this repository to
$env:OneDrive\Documents\PowerShell\Snippets - In an Administrator elevated editor, edit
$PROFILE.AllUsersAllHosts. - Add
$env:Snippets="$env:OneDrive\Documents\PowerShell\Snippets"to the end and save it.
- Clone this repository to
~/.config/powershell/Snippets - In an Administrator elevated editor, edit
$PROFILE.AllUsersAllHosts. - Add
$env:Snippets="$env:HOME/.config/powershell/Snippets"to the end and save it.
OR
Execute this script:
curl 'https://raw.githubusercontent.com/PS-Services/Snippets/master/linux-setup.sh' -v | /bin/bash| Win | *nix | Script | Alias | Description |
|---|---|---|---|---|
| âś… | âś… | bing.ps1 |
bing |
Search Bing from PowerShell. Requires $env:BingApiKey. |
| âś… | âś… | clean-folder.ps1 |
clean |
Remove all bin and obj folders in current path. |
| âś… | âś… | github.ps1 |
hub |
Navigate to GitHub repositories folder. Auto-detects $env:GITHUB or set it manually. |
| âś… | âś… | oh-my-posh-*.ps1 |
posh |
Initializes Oh-My-Posh for the current shell (Windows, Linux, or macOS). |
| âś… | âś… | module-loader.ps1 |
modrl |
Auto-loads PowerShell modules from modules.yml. Use modrl to reload all or modrl <name> for one. |
| âś… | âś… | update-snippets.ps1 |
snipup / profileup |
Update Snippets or Profile from GitHub. |
| âś… | âś… | _common.ps1 |
snipps |
Bootstrap script. Navigate to Snippets folder with snipps. |
| âś… | âś… | _repos.ps1 |
(see Repositories) | Unified package manager query system. |
| âś… | chocolatey.ps1 |
Setup Chocolatey profile in PowerShell. | ||
| âś… | devmode.ps1 |
devmode |
Start VS 2022 Developer Mode Tools. |
All scripts work in both PowerShell Core and Windows PowerShell 5.1.
Modules can be declaratively defined in a modules.yml file and will be automatically installed (from PSGallery) and imported during profile initialization. The powershell-yaml module is used for YAML parsing and will be auto-installed if missing. If powershell-yaml cannot be installed (e.g., no network), the auto-loader degrades gracefully and skips module loading.
By default, the loader reads $env:Snippets\modules.yml. To use a user-specific configuration (recommended), set $env:SnippetsModulesYaml in your $PROFILE before the Snippets block:
$env:Snippets = "$env:OneDrive\Documents\PowerShell\Snippets"
$env:SnippetsModulesYaml = "$env:USERPROFILE\modules.yml"modules:
- name: ModuleName # Required. Module name.
version: "1.0.0" # Optional. Minimum required version (SemVer pre-release suffixes stripped).
source: PSGallery # Optional. "PSGallery" (default) or a file path to a .psd1/.psm1.
required: true # Optional. Default true. If false, failure is non-fatal.
parameters: [] # Optional. Arguments passed to Import-Module -ArgumentList.- PSGallery modules: Installed automatically to
CurrentUserscope if missing or below the specified version. - Path-based modules: Imported directly from the specified
.psd1or.psm1file path. - Required modules (
required: true): Raise an error if they fail to load. - Optional modules (
required: false): Fail silently with a verbose message. powershell-yaml: Always loaded first as the YAML parser; include it in yourmodules.ymlto make the dependency explicit.- Reload: Use
modrlto reload all modules from YAML, ormodrl <ModuleName>to reload a single module.
modules:
- name: powershell-yaml
required: true
- name: posh-git
required: false
- name: Terminal-Icons
required: false
version: "0.11.0"
- name: MsixTools
source: "E:\\github\\remote-agent\\scripts\\MsixTools\\MsixTools.psd1"
required: false| Variable | Description |
|---|---|
$env:Snippets |
Required. Path to the Snippets repository. Set in $PROFILE.AllUsersAllHosts. |
$env:SnippetsModulesYaml |
Optional. Path to user-specific modules.yml. Defaults to $env:Snippets\modules.yml. |
$env:GITHUB |
Optional. Root of your GitHub repositories folder. Auto-detected if not set. |
$env:BingApiKey |
Optional. Bing Search API subscription key for the bing alias. |
$env:VerboseStartup |
Optional. Set to 'true' for verbose profile startup output. |
$env:Snippets = "$env:OneDrive\Documents\PowerShell\Snippets"
$env:SnippetsModulesYaml = "$env:USERPROFILE\modules.yml"
if ($env:VerboseStartup -eq 'true') {
[switch]$Verbose = $true
}
else {
[switch]$Verbose = $false
}
Set-ExecutionPolicy -ExecutionPolicy Unrestricted -Scope Process
try {
Import-Module Microsoft.PowerShell.Utility
if (Test-Path $env:Snippets) {
Push-Location
Set-Location $env:Snippets
$snippets = Get-ChildItem *.ps1
Pop-Location
$snippets.FullName | ForEach-Object -Process {
$snippet = $_
. $snippet -Verbose:$Verbose
}
}
else {
Write-Verbose "No directory found at [$env:Snippets]" -Verbose:$Verbose
}
Write-Verbose 'PowerShell Ready.' -Verbose:$Verbose
}
catch {
Write-Host $Error
}
finally {
Write-Verbose "Leaving $Profile" -Verbose:$Verbose
}# $env:VerboseStartup = 'true'
$profileScript = Split-Path $PROFILE -Leaf
if ((-not $env:Snippets) -or (-not (Test-Path $env:Snippets))) {
$env:Snippets = "$env:HOME/.config/powershell"
}
$env:SnippetsModulesYaml = "$env:HOME/modules.yml"
if ($env:VerboseStartup -eq 'true') {
[switch]$MasterVerbose = $true
}
else {
[switch]$MasterVerbose = $false
}
try {
Push-Location -Verbose:$MasterVerbose
Import-Module Microsoft.PowerShell.Utility
$env:Snippets = Join-Path $env:Snippets -ChildPath Snippets -Verbose:$MasterVerbose
if (-not (Test-Path $env:Snippets -Verbose:$MasterVerbose)) {
git clone "https://github.com/PS-Services/Snippets.git"
}
else {
Write-Verbose "[$profileScript] Found $env:Snippets" -Verbose:$MasterVerbose
}
if (Test-Path $env:Snippets -Verbose:$MasterVerbose) {
Push-Location -Verbose:$MasterVerbose
Set-Location $env:Snippets -Verbose:$MasterVerbose
$snippets = Get-ChildItem *.ps1 -Verbose:$MasterVerbose -Exclude _common.ps1
Pop-Location -Verbose:$MasterVerbose
$resultList = @()
$snippets.FullName | ForEach-Object -Verbose:$MasterVerbose -Process {
try {
$snippet = $_
$snippetName = Split-Path $snippet -Leaf
Write-Verbose "[$profileScript]->[$snippetName] Calling with: -Verbose:`$$MasterVerbose" -Verbose:$MasterVerbose
$result = $null
$result = . $snippet -Verbose:$MasterVerbose
}
catch {
Write-Error "[$profileScript]->[$snippetName] Error: $_"
}
finally {
$report = "[$snippetName]->[ $result ]"
$resultList += $report;
}
}
if ($resultList.Length -gt 0) {
"[$profileScript] Snippet Results`n---`n$([System.String]::Join("`n", $resultList))`n---`n"
}
else {
"[$profileScript] No snippets were executed."
}
}
else {
Write-Verbose "[$profileScript] No directory found at [$env:Snippets]" -Verbose:$MasterVerbose
}
}
catch {
Write-Error "[$profileScript] $_"
}
finally {
Pop-Location
Write-Verbose "Leaving $Profile" -Verbose:$MasterVerbose
}
Get-Alias -Verbose:$MasterVerbose `
| Where-Object -Property Description -imatch 'snippet' -Verbose:$MasterVerbose `
| Sort-Object -Property Description, Name -Verbose:$MasterVerbose `
| Format-Table Name, Description -AutoSize -Verbose:$MasterVerbose
Write-Verbose 'PowerShell Ready.' -Verbose:$MasterVerboseThe unified repository system (_repos.ps1) provides a single interface to query and manage packages across multiple package managers.
| Alias | Manager |
|---|---|
dn |
dotnet |
dt |
dotnet tool |
ng |
NuGet |
np |
NPM |
pp |
pip |
pps |
pip-search |
psg |
PSGallery |
| Alias | Manager |
|---|---|
repos |
Search all OS repos |
wg |
winget |
scp |
scoop |
ch |
chocolatey |
| Alias | Manager |
|---|---|
repos |
Search all OS repos |
ap |
apt |
zy |
zypper |
sn |
snap |
br |
homebrew |
Each alias accepts a command followed by arguments: <alias> <command> <package>
Common commands: search, install, uninstall, update, list, show
repos search oh-my-posh
Repo Command
---- -------
scoop install oh-my-posh@18.5.0
sudo choco install oh-my-posh --version 18.5.0 -y
winget install XP8K0HKJFRXGCK -s msstore # oh-my-poshpsg search posh-git
Repo Command
---- -------
PSGallery Install-Module posh-git -MinimumVersion 1.1.0 -Scope CurrentUser