Skip to content

rez23/PowerShellWSL

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 items
Get-WslItem -Path /home/spart
Get-WslChildItem -Path /home/apart

# Remove items
Remove-WslItem -Path /home/spart/my-file.txt

# Add items
Add-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: