This guide will walk you through building PowerShell on Linux. We'll start by showing how to set up your environment from scratch.
These instructions are written assuming Ubuntu 24.04 LTS (the CI uses ubuntu-latest). The build module works on a best-effort basis for other distributions.
Using Git requires it to be set up correctly; refer to the Working with the PowerShell Repository, Readme, and Contributing Guidelines.
This guide assumes that you have recursively cloned the PowerShell repository and cded into it.
We use the .NET Command-Line Interface (dotnet) to build the managed components.
Installing the toolchain is as easy as running Start-PSBootstrap in PowerShell.
Of course, this requires a self-hosted copy of PowerShell on Linux.
Fortunately, this is as easy as downloading and installing the package.
The ./tools/install-powershell.sh script will also install the PowerShell package.
In Bash:
./tools/install-powershell.sh
pwshYou should now be in a PowerShell console host that is installed. Just import our module, bootstrap the dependencies, and build!
In PowerShell:
Import-Module ./build.psm1
Start-PSBootstrap -Scenario BothThe Start-PSBootstrap function does the following:
- Installs build dependencies and packaging tools via
apt-get(or equivalent package manager) - Downloads and installs the .NET SDK (currently version 10.0.100-rc.1) to
~/.dotnet
If you want to use dotnet outside of Start-PSBuild, add ~/.dotnet to your PATH environment variable.
We maintain a PowerShell module with the function Start-PSBuild to build PowerShell.
Since this is PowerShell code, it requires self-hosting.
If you have followed the toolchain setup section above, you should have PowerShell Core installed.
Import-Module ./build.psm1
Start-PSBuild -UseNuGetOrgCongratulations! If everything went right, PowerShell is now built.
The Start-PSBuild script will output the location of the executable:
./src/powershell-unix/bin/Debug/net10.0/linux-x64/publish/pwsh.
You should now be running the PowerShell Core that you just built, if you run the above executable.
You can run our cross-platform Pester tests with Start-PSPester -UseNuGetOrg, and our xUnit tests with Start-PSxUnit.