Beispielmodule

Wenn wir uns den Markt für PowerShell Erweiterungen (aka Module) anschauen, dann findet man schnell ein paar Module für die eigene PowerShell und den eigenen Geschmack.

ZLocation

Eine wiederkehrende Aufgabe in Shells ist das Navigieren durch Ordnerstrukturen. Die klassischen Lösungen in Shells heißen z.B. autojump und nutzen den Kurzbefehl j zum Ordnerwechsel.

ZLocation ist der moderne Nachfolger (Nachbau) und lässt sich einfach bereitstellen: Github Repo for Zlocation

Kurzanleitung ZLocation:

Install-Module ZLocation -Scope CurrentUser

Einbau in der gewünschten Profiledatei $PROFILE:

Import-Module ZLocation
Write-Host -Foreground Green "`n[ZLocation] knows about $((Get-ZLocation).Keys.Count) locations.`n"

Hierdurch wird das Modul geladen und wir erhalten eine Kurzinfo über bereits bekannt Ordner-Sprungziele.

Die in Zlocation bekannten Ordner erhält man mittels z und diesen Aufruf nutzt man auch einfach als Ersatz für den üblichen Alias cd oder das PowerShell-Original Set-Location.

Mit z kann man dann die Gewichtung der Ordner auflisten lassen:

z | Sort-Object weight -Descending

Terminal-Icons

Ich möchte meine Shell weiter grafisch und farbig highlighten lassen. Hierfür gibt es diverse Tools / Module und ich finde Terminal Icons (Github) sehr ordentlich.

Und an dieser Stelle nochmal der Hinweis auf Nerd Fonts Downloads.

Install-Module Terminal-Icons -Scope CurrentUser

Einbau in $PROFILE - Terminal Icons nach Oh-My-Posh:

Einbau in der gewünschten Profiledatei $PROFILE:

Import-Module Terminal-Icons

Das kann dann so aussehen:

Terminal Icons

Terminal Icons

Hier in einer bildbearbeiteten Darstellung für diverse Icons: Show-TerminalIconsTheme

Oh-My-Posh

… und posh-git

Als Nutzer diverser Shells auf unterschiedlichen Betriebssystemen möchte ich mir auch die PowerShell grafisch und technisch aufwerten. Unter Linux mag ich deswegen auch die Zsh mit den Oh-My-Zsh Plugins. Auf dieser Idee beruht auch Oh-My-Posh.

Hinweis

Für die folgenden zwei (abhängigen) Module sollte auf dem System ebenfalls das Tool Git (Git Portal) installiert sein. Und natürlich muss ein vernünftiger Nerd-Font installiert sein!

Anleitung: https://docs.microsoft.com/de-de/windows/terminal/tutorials/powerline-setup

Englisches Original: https://docs.microsoft.com/en-us/windows/terminal/tutorials/powerline-setup

Anm.: Im englischen Original auch Videoanleitung von Scott Hanselmann

Kurzanleitung:

Install-Module posh-git -Scope CurrentUser
Install-Module oh-my-posh -Scope CurrentUser
# if on PowerShell core:
# Install-Module -Name PSReadLine -AllowPrerelease -Scope CurrentUser -Force -SkipPublisherCheck

Sicherstellen und Nutzen der Module über die $PROFILE:

Import-Module posh-git
Import-Module oh-my-posh
# OLD VERSION: Set-Theme Paradox
# Set-PoshPrompt -Theme powerlevel10k_classic
# Set-PoshPrompt -Theme jandedobbleer
Set-PoshPrompt -Theme paradox

In Windows Terminal kann das dann so aussehen:

Powerline for PowerShell

Powerline for PowerShell

Eine nötigen Nerd Font stelle ich für die Trainees bereit oder lässt sich leicht finden.

Mit Get-PoshThemes (OLD: Get-Themes) erhält man eine Übersicht über installierte Designs/Themes.

VirtualDesktop

Und mit diesem Modul kann man sich mal fix die Windows Virtual Desktops einrichten.

Ich habe - auf jedem Betriebssystem - gerne folgende Arbeitsoberflächen (aka Workspaces):

  1. Browser

  2. Konsole

  3. Coding

  4. VMS

Mit dem folgenden Skript kann man schnell gewünschte Programme auf den Virtual Desktops 0 bis 3 verteilen:

# Skript to initialize my Virtual Desktops
# Needs Module VirtualDesktop

Import-Module -Name VirtualDesktop -ErrorAction SilentlyContinue -WarningAction SilentlyContinue

Start-Process firefox
sleep 3
Switch-Desktop 1
sleep 3
Start-Process wt
sleep 3
Switch-Desktop 2
Start-Process explorer
sleep 3
Switch-Desktop 0

Und wenn man will, dann legt man sich noch eine Verknüpfung mit

C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe -noprofile -file "C:\pfad\windows-on-desktops.ps1"

auf den Desktop - gerne auch noch mit Tastenkombination!

PSFzf

Der Fuzzy Finder unter Windows.

Github Junegunne/fzf

Denn wir sollten zuerst natürlich eine Windows-Binary für Fzf bereitstellen.

Fzf-Releases

Ich hätte das Tool fzf.exe gerne bei einem Git-Repo für meine PowerShell Umgebung von Windows:

Tool-Ordner: C:\Users\joeb\Documents\WindowsPowerShell\tools\...

Dann müssen wir natürlich den Pfad für die PowerShell erweitern, damit das Tools auch gestartet werden kann: $PROFILE

# Path for Joeb Tools - Attention: hard coded Path!
# -------------------
$env:PATH += ";C:\Users\joeb\Documents\WindowsPowerShell\tools"

Testen: Get-Command fzf.exe

Und jetzt brauchen wir den PowerShell Wrapper für fzf: das Modul PSFzf.

Install-Module -Name PSFzf -Scope CurrentUser

Wir vervollständigen noch die $PROFILE:

# PSFzf
# -----
# Windows Hilfe: https://github.com/kelleyma49/PSFzf
# Windows Fzf Binary in .\Documents\WindowsPowerShell\tools
Import-Module PSFzf
# replace 'Ctrl+t' and 'Ctrl+r' with your preferred bindings:
Set-PsFzfOption -PSReadlineChordProvider 'Ctrl+t' -PSReadlineChordReverseHistory 'Ctrl+r'


# ============================================================================
# Functions
# ============================================================================

# PSFzf functions

# To change to a user selected directory:
function fzdir {
    Get-ChildItem . -Recurse -Attributes Directory | Invoke-Fzf | Set-Location
    }
# To edit a file:
function fzfile {
    Get-ChildItem . -Recurse -Attributes !Directory | Invoke-Fzf | % { notepad $_
    }
}

Und hier haben wir auch gleich noch ein paar spielerische Functions eingebaut, damit wir mal schnell Ordner wechseln oder Dateien öffnen können.

… tbc …