pc-master
v1.0.0Control the Windows PC from WSL2. Use when the user asks to open/close applications, manage processes, take screenshots, control windows, manage files on Windows (C:), automate tasks, or do anything that requires interacting with the Windows host from WSL2 (e.g. "open Chrome", "kill Spotify", "take...
Installation
PC Master — Windows Control from WSL2
All Windows binaries are accessible via /mnt/c/Windows/System32/. Call them directly from bash.
Prerequisites
WSL2 interop must be working. If .exe calls fail with UtilAcceptVsock errors, ask the user to run wsl --shutdown in Windows and relaunch WSL.
Core Commands
Processes
# List all processes
/mnt/c/Windows/System32/tasklist.exe
# Filter by name
/mnt/c/Windows/System32/tasklist.exe /FI "IMAGENAME eq chrome.exe"
# Kill by name
/mnt/c/Windows/System32/taskkill.exe /F /IM chrome.exe
# Kill by PID
/mnt/c/Windows/System32/taskkill.exe /F /PID 1234
Launch Applications
# Open a URL in default browser
/mnt/c/Windows/System32/cmd.exe /c "start https://google.com"
# Open an app by name
/mnt/c/Windows/System32/cmd.exe /c "start chrome"
/mnt/c/Windows/System32/cmd.exe /c "start spotify"
/mnt/c/Windows/System32/cmd.exe /c "start notepad"
# Open a file with its default app
/mnt/c/Windows/System32/cmd.exe /c "start C:\Users\User\file.pdf"
# Launch full path
/mnt/c/Windows/System32/cmd.exe /c "start "" "C:\Program Files\App\app.exe""
⚠️
cmd.exe /c startmust be run from a Windows path. Use/mnt/c/Windows/System32/cmd.exe /c "cd /d C: && start ..."if cwd is a UNC path (WSL path).
PowerShell (advanced)
PS=/mnt/c/Windows/System32/WindowsPowerShell/v1.0/powershell.exe
# Run a command
$PS -NonInteractive -Command "Get-Process | Select-Object -First 10"
# Get window titles
$PS -NonInteractive -Command "Get-Process | Where-Object {$_.MainWindowTitle} | Select-Object Name, MainWindowTitle"
# Set volume
$PS -NonInteractive -Command "(New-Object -ComObject WScript.Shell).SendKeys([char]174)"
Screenshot
# Take a screenshot and save to Windows desktop
PS=/mnt/c/Windows/System32/WindowsPowerShell/v1.0/powershell.exe
$PS -NonInteractive -Command "Add-Type -AssemblyName System.Windows.Forms; [System.Windows.Forms.Screen]::PrimaryScreen | ForEach-Object { $bmp = New-Object System.Drawing.Bitmap($_.Bounds.Width, $_.Bounds.Height); $g = [System.Drawing.Graphics]::FromImage($bmp); $g.CopyFromScreen($_.Bounds.Location, [System.Drawing.Point]::Empty, $_.Bounds.Size); $bmp.Save('C:\screenshot.png') }"
File System (Windows paths)
# Windows C: is at /mnt/c/ in WSL
ls /mnt/c/Users/
cat /mnt/c/Users/Username/Desktop/file.txt
cp /mnt/c/Users/Username/Downloads/file.zip /mnt/c/Users/Username/Desktop/
# Find Windows username
ls /mnt/c/Users/ | grep -v "Public|Default|All Users"
System Info
# Windows version
/mnt/c/Windows/System32/cmd.exe /c "ver"
# Disk usage
/mnt/c/Windows/System32/cmd.exe /c "wmic logicaldisk get size,freespace,caption"
# Network info
/mnt/c/Windows/System32/ipconfig.exe
Common Patterns
Close and reopen an app:
/mnt/c/Windows/System32/taskkill.exe /F /IM chrome.exe
sleep 2
/mnt/c/Windows/System32/cmd.exe /c "start chrome"
Check if app is running:
/mnt/c/Windows/System32/tasklist.exe /FI "IMAGENAME eq spotify.exe" | grep -i spotify && echo "Running" || echo "Not running"
Open a specific website:
/mnt/c/Windows/System32/cmd.exe /c "start https://www.google.com"
Notes
- Output may contain garbled characters (Windows encoding vs UTF-8) — this is normal, content is still readable
- Some GUI apps launched via
startwon't produce output — that's expected - For interactive PowerShell scripts, write to a temp file and read it back instead of capturing stdout directly
- See
references/windows-apps.mdfor common app executable names