Skip to content

Repository files navigation

PowerShellWSL a PowerShell wrapper to WSL

PowerShell module to manage in the most complete ways Windows Subsystem for Linux via PowerShells.

Installation

Set-PSResourceRepository-Name PSGallery -Trusted
Install-PsResource-Name PowerShellWSL -Scope CurrentUser
Import-Module PowerShellWSL

Exported Commands

Core WSL Management

  • Get-WslStatus: Shows WSL platform status and version details.
  • Get-WslDistribution: Lists installed distributions and supports filtering by status/default/name pattern.
  • Find-WslDistribution: Lists installable distributions from wsl --list --online.
  • Install-WslDistribution: Installs a distribution from Store or local source.
  • Unregister-WslDistribution: Unregisters one or more distributions.
  • Start-WslDistribution (alias Start-Wsl): Starts a specific distribution.
  • Stop-WslDistribution: Stops a specific distribution.
  • Stop-Wsl: Shuts down the full WSL service (wsl --shutdown).
  • Set-Wsl: Placeholder for future defaults management (currently warns that it is not implemented).

Command Execution and Config

  • Invoke-WslCommand: Runs commands inside WSL with optional distro/user/shell controls.
  • Get-WslConfig: Reads global .wslconfig or distro /etc/wsl.conf.
  • ConvertTo-WslPath: Converts Windows paths to WSL paths.
  • ConvertTo-WindowsPath: Converts WSL paths to Windows paths.

VHD and Storage Helpers

  • Export-WslVhdToFile: Exports a distribution to archive/image formats.
  • Import-WslVhdFromFile: Imports/registers a distribution from VHD or tar.
  • Get-WslVirtualDrivePaths: Returns WSL and/or Docker VHD paths.
  • Optimize-WslVirtualDrives: Optimizes WSL/Docker virtual drives to reclaim space.
  • Add-WslLocalDisk: Mounts local disks/VHDs into WSL.
  • Remove-WslLocalDisk: Unmounts local disks from WSL.

Usage Examples

Note: many management/action cmdlets return no pipeline objects on success. To see progress/success messages, use -InformationAction Continue.

1) Inspect WSL status and installed distros

Get-WslStatus
MainDistro : Ubuntu (v2 Stopped)
Kernel : 6.6.114.1
WSL : 2.7.3.0
WSLg : 1.0.73.0
MSRDC : 1.2.6676.0
Direct3D : 1.611.1.0
DXCore : 10.0.26100.1
Windows : 10.0.26200.8737
Get-WslDistribution
Distribution Version IsDefault Status VHDFile
------------ ------- --------- ------ --------
Ubuntu 2 True Stopped C:\...\ext4.vhdx
docker-desktop 2 False Stopped C:\Docker\...\ext4.vhdx
archlinux 2 False Stopped C:\Docker\...\ext4.vhdx
Get-WslDistribution-Default
Distribution Version IsDefault Status VHDFile
------------ ------- --------- ------ --------
Ubuntu 2 True Stopped C:\wsl\...\ext4.vhdx
Get-WslDistribution-Distribution "Ubuntu*"
Distribution Version IsDefault Status VHDFile
------------ ------- --------- ------ --------
Ubuntu 2 True Stopped C:\...\ext4.vhdx
Get-WslDistribution-Status Running

2) Discover installable distros from online catalog

Find-WslDistribution-Distribution "Ubuntu*"
Distribution FriendlyName IsInstalled
------------ ------------ -----------
Ubuntu Ubuntu True
Ubuntu-26.04 Ubuntu 26.04 LTS False
Ubuntu-24.04 Ubuntu 24.04 LTS False
Ubuntu-22.04 Ubuntu 22.04 LTS False

3) Work with distributions (install, unregister, etc.)

Install a distribution from the online catalog:

Install-WslDistribution-Distribution "Ubuntu"-InformationAction Continue

Install a distribution from a local tar file:

Install-WslDistribution-FromFile "D:\Backups\ubuntu.tar"-Name "Ubuntu-Dev"-Location "D:\WSL\Ubuntu-Dev"-InformationAction Continue

Unregister a distribution:

Unregister-WslDistribution-Distribution "Ubuntu-Dev"-InformationAction Continue

Start installed distributions:

Start-WslDistribution-Distribution "Ubuntu"-InformationAction Continue

or

Start-Wsl-Distribution "Ubuntu"-InformationAction Continue

Stop a running distribution:

Stop-WslDistribution-Distribution "Ubuntu"-InformationAction Continue

Shutdown the full WSL service:

Stop-Wsl-InformationAction Continue

5) Run commands inside WSL

Invoke-WslCommand-Distribution "Ubuntu"-Command "uname -a"
Linux MSI 6.6.114.1-microsoft-standard-WSL2 #1 SMP PREEMPT_DYNAMIC Mon Dec 1 20:46:23 UTC 2025 x86_64 GNU/Linux
Get-WslDistribution-Default |Invoke-WslCommand-Command "whoami"
spart

6) Read WSL configuration

Get Host .wslconfig values:

Get-WslConfig

Get a specific distribution's /etc/wsl.conf values:

Get-WslConfig-Distribution "Ubuntu"
Property Value
--------- -----
boot.systemd true
user.default spart

7) Navigate paths in WSL FS (via Host)

Get item from WSL path:

# Get itemsGet-WslItem-Path /home/spart
Get-WslChildItem-Path /home/apart
# Remove itemsRemove-WslItem-Path /home/spart/my-file.txt
# Add itemsAdd-WslItem-ItemType Directory -Path /my-dir

8) Export and import distro data

Export-WslVhdToFile-Distribution "Ubuntu"-Destination "D:\Backups\Ubuntu-20260704.tar"-InformationAction Continue
Export-WslVhdToFile-Distribution "Ubuntu"-Destination "D:\Backups\Ubuntu.vhdx"-FormatAs vhdx -InformationAction Continue
Not executed in this verification pass (mutating command).
Import-WslVhdFromFile-Distribution "Ubuntu-Restore"-InstallLocation "D:\WSL\Ubuntu-Restore"-VhdPath "D:\Backups\Ubuntu.vhdx"-InformationAction Continue

9) Inspect and optimize virtual drive files

Get-WslVirtualDrivePaths-Wsl
DockerVHDPaths
--------------
{C:\Users\spart\AppData\Local\Docker\wsl\disk\docker_data.vhdx, C:\Users\spart\AppData\Local\Docker\wsl\disk\docker_image.vhdx}
Get-WslVirtualDrivePaths-Docker
DockerVHDPaths
--------------
{C:\Users\spart\AppData\Local\Docker\wsl\disk\docker_data.vhdx, C:\Users\spart\AppData\Local\Docker\wsl\disk\docker_image.vhdx}
Optimize-WslVirtualDrives-Wsl -InformationAction Continue
Optimize-WslVirtualDrives-Docker -InformationAction Continue

10) Mount and unmount local disks in WSL

Add-WslLocalDisk-Disk "\\.\PHYSICALDRIVE3"-FsType ext4 -InformationAction Continue
Add-WslLocalDisk-Disk "D:\Disks\data.vhdx"-Vhd -FsType ext4 -InformationAction Continue
Remove-WslLocalDisk-Disk "\\.\PHYSICALDRIVE3"-InformationAction Continue

Notes

  • Use Get-Help <CommandName> -Detailed for full parameter documentation.
  • Commands that accept -Distribution support property-name pipeline binding where applicable.
  • For release/tag automation, see local hooks and CI workflows in .githooks and .github/workflows.

Support

If this project helps you, star the repository or support the author: