I’d like to share a small open-source project I’ve been working on: PS2VM.
PS2VM is a tool that compiles a subset of Windows PowerShell 5.x scripts into a compact bytecode format (.pbc) and runs them on a simple stack-based virtual machine. The goal is not to replace PowerShell, but to explore an alternate execution path: AST → opcodes → VM, with fallback to the real PowerShell engine on the same runspace when a construct isn’t implemented natively.
What it can do
Compile .ps1 → .pbc
Run bytecode inside the VM
Disassemble .pbc for inspection
Handle common language features (functions, loops, if/switch, arrays, pipelines in a limited form, cmdlet calls, scoped variables, etc.)
Delegate complex features (try/catch, modules, advanced attributes, redirections, and more) to the host PowerShell engine so scripts don’t simply break
What it is not
A full reimplementation of the PowerShell runtime
A guarantee of 100% language coverage
A tool intended for malware, evasion, or unauthorized use
It’s aimed at people interested in compilers, interpreters, PowerShell internals, automation research, and experimentation with custom execution engines — for legitimate and authorized use only.
Feedback, issues, and constructive criticism are welcome.
Thanks for reading.
Github Repo :
https://github.com/NIKJOO/PS2VM