Muscle Memory
Same ls -la, grep -r, ps aux commands you already know. Same flags, same output format. No new syntax to learn.
Muscle Memory
Same ls -la, grep -r, ps aux commands you already know. Same flags, same output format. No new syntax to learn.
Typed Pipeline
Objects survive through grep, sort, head, tail. Pipe ls -la | grep '.ps1' and get LsEntry objects back, not strings to parse.
Cross-Platform
Windows, Linux, macOS. No WSL overhead, no VM, no filesystem boundary. Runs everywhere PowerShell runs.
Bash-style commands that return real objects:
PS> ls -la | grep '.ps1' | sort -k5 -h-rw-r--r-- 1 beagle wheel 141234 Apr 2 09:46 PsBash.psm1-rw-r--r-- 1 beagle wheel 4521 Apr 2 00:57 PsBash.psd1
PS> $files = ls -la | grep '.ps1' | sort -k5 -hPS> $files.NamePsBash.psm1PsBash.psd1PS> $files[0].SizeBytes141234The output looks like bash. The pipeline carries typed objects. You get both.
| Task | Bash | PsBash | Native PowerShell |
|---|---|---|---|
| List files with details | ls -la | ls -la | Get-ChildItem | Format-List |
| Find text in files | grep -r 'TODO' . | grep -r 'TODO' . | Select-String -Pattern 'TODO' -Path . -Recurse |
| Sort by column | sort -k5 -h | sort -k5 -h | Sort-Object { $_.Length } |
| First 10 lines | head -n 10 file.txt | head -n 10 file.txt | Get-Content file.txt -Head 10 |
| Count lines | wc -l *.ps1 | wc -l *.ps1 | (Get-Content *.ps1 | Measure-Object -Line).Lines |
Same command. Typed objects. No string parsing.
68 Commands
ls, grep, awk, jq, sed, find, tar, and 61 more Unix commands reimplemented as native PowerShell cmdlets.
775 Tests
Every command tested across flag combinations, edge cases, and pipeline scenarios.
3 Platforms
Windows, Linux, macOS. CI-verified on all three.
20 Typed Objects
LsEntry, GrepMatch, PsEntry, WcResult and more. Real properties, not text.