> For the complete documentation index, see [llms.txt](https://docs.devolutions.net/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://docs.devolutions.net/powershell-universal/getting-started.md).

# Installation

Install PowerShell Universal using the MSI, ZIP, or PowerShell module on Windows and Linux, including antivirus exclusions and default admin credentials.

PowerShell Universal supports Windows MSI, ZIP, PowerShell module, Docker, IIS, and Linux service installations. Choose the method that matches your hosting environment.

### See also

* [Devolutions Academy – Installation](https://academy.devolutions.net/student/activity/3465938-installation)

## MSI Install (Windows)

The MSI install creates a PowerShell Universal service. By default, PowerShell Universal listens on port 5000. You can navigate to `http://localhost:5000`

MSI downloads are available on our [download page](https://devolutions.net/download-center/powershell-universal/).

System installs run as a Windows service. User installs run when the user logs in to the machine. The user install runs in the user's context.

### MSI Parameters

Use uppercase `PROPERTY=value` arguments with `msiexec`. The defaults below apply to a new machine-wide installation unless a per-user default is listed.

| Parameter                | Description                                                                                                                                                 | Default value                                                                                                                                |
| ------------------------ | ----------------------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------- |
| `INSTALLFOLDER`          | Folder where PowerShell Universal is installed.                                                                                                             | Machine: `%ProgramFiles%\Universal`; per-user: `%LocalAppData%\Programs\PowerShellUniversal`                                                 |
| `MSIINSTALLPERUSER`      | Installation scope. Set to `1` for a per-user installation; set to `0` for a machine-wide installation.                                                     | `0`                                                                                                                                          |
| `TCPPORT`                | HTTP port for the server.                                                                                                                                   | `5000`                                                                                                                                       |
| `HTTPSPORT`              | HTTPS port when `DEVCERT=1`.                                                                                                                                | `5001`                                                                                                                                       |
| `DEVCERT`                | Creates and installs a localhost development certificate and enables the HTTPS endpoint. This is disabled for per-user installs.                            | Machine: `1`; per-user: `0`                                                                                                                  |
| `REPOFOLDER`             | Repository folder for PowerShell Universal configuration files.                                                                                             | Machine: `%ProgramData%\UniversalAutomation\Repository`; per-user: `%LocalAppData%\PowerShellUniversal\Repository`                           |
| `CONNECTIONSTRING`       | Connection string for the selected persistence provider.                                                                                                    | Machine: `Data Source=%ProgramData%\UniversalAutomation\database.db`; per-user: `Data Source=%LocalAppData%\PowerShellUniversal\database.db` |
| `DATABASETYPE`           | Persistence provider. Valid values are `SQLite`, `PostgreSQL`, and `Microsoft SQL Server`.                                                                  | `SQLite`                                                                                                                                     |
| `APPSETTINGSPATH`        | Path where the installer writes `appsettings.json` when it does not already exist.                                                                          | Machine: `%ProgramData%\PowerShellUniversal\appsettings.json`; per-user: `%LocalAppData%\PowerShellUniversal\appsettings.json`               |
| `INSTALLTYPE`            | Sets the `Mode` value written to `appsettings.json`. `Desktop` writes Desktop mode; any other value writes Server mode.                                     | `Server`                                                                                                                                     |
| `STARTSERVICE`           | Starts the PowerShell Universal Windows service after installation. This does not apply to per-user installs because they do not install a Windows service. | Machine: `1`; per-user: `0`                                                                                                                  |
| `SERVICEACCOUNT`         | Fully qualified Windows service account, such as `CONTOSO\psu_svc`. Leave blank to run as Local System. Machine-wide installs only.                         | Empty (Local System)                                                                                                                         |
| `SERVICEACCOUNTPASSWORD` | Password for `SERVICEACCOUNT`. The installer masks this value in its log. Machine-wide installs only.                                                       | Empty                                                                                                                                        |
| `OPENBROWSER`            | Opens the web UI after the Windows service starts successfully. Machine-wide installs only.                                                                 | `1`                                                                                                                                          |
| `ADDPSMODULEPATH`        | Adds the PowerShell Universal module directory to `PSModulePath`.                                                                                           | `1`                                                                                                                                          |
| `TELEMETRY`              | Enables anonymous telemetry collection.                                                                                                                     | `1`                                                                                                                                          |
| `STARTUPSHORTCUT`        | Creates a startup shortcut for a per-user installation.                                                                                                     | Per-user: `1`                                                                                                                                |

### Example

The example below runs a silent, machine-wide MSI installation without starting the service. The account and password values are examples only.

{% code overflow="wrap" %}

```powershell
Start-Process msiexec.exe -ArgumentList '/i "C:\Installers\PowerShellUniversal.msi" /q /norestart /L*V "C:\Logs\powershell-universal-msi.log" MSIINSTALLPERUSER=0 STARTSERVICE=0 SERVICEACCOUNT=CONTOSO\psu_svc SERVICEACCOUNTPASSWORD=ReplaceWithASecurePassword' -Wait -NoNewWindow
```

{% endcode %}

## ZIP Install

You can also download the ZIP from our [Downloads page](https://devolutions.net/download-center/powershell-universal/) if you would like to xcopy deploy the files on Windows or Linux.

### Windows

You can start Universal by unzipping the contents, unblocking the files and then executing `Universal.Server.exe`.

```powershell
Expand-Archive -Path .\Universal.zip -DestinationPath .\Universal
Get-ChildItem .\Universal -Recurse | Unblock-File
Start-Process .\Universal\Universal.Server.exe
```

### Linux

You can use the following command line on Linux to install and start PowerShell Universal:

```bash
wget -O psu.zip https://cdn.devolutions.net/download/Devolutions.PowerShellUniversal.linux-x64.2026.3.0.0.zip
sudo apt install unzip
unzip psu.zip -d PSU
chmod +x ./PSU/Universal.Server
./PSU/Universal.Server
```

## Linux Service

You can use `systemd` to start PowerShell Universal as a service. The below script is an example of downloading a version of PowerShell Universal and installing it as a service:

```bash
# ----
# This script will install PowerShell Universal on Linux as a service
# This has been tested on Ubuntu 20.04 (ARM64) on a Raspberry Pi 4
# ----
# Dependencies:
# wget
# unzip
#
# Make sure they are installed
# ----

# These are used to derive the download URL
PSU_VERSION="2026.3.0.0" # Change this to the desired version
PSU_ARCH="arm64" # Change this to your desired architecture
PSU_FILE="Devolutions.PowerShellUniversal.linux-${PSU_ARCH}.${PSU_VERSION}.zip"
PSU_URL="https://cdn.devolutions.net/download/${PSU_FILE}"

# These are used for installing PowerShell Universal
# If you'd like to use a different path, change this
PSU_PATH="/opt/psuniversal"
PSU_EXEC="${PSU_PATH}/Universal.Server"

# These are for installing it as a service
PSU_SERVICE="psuniversal"
PSU_USER="psuniversal"

# ----
# BEGIN
# ----

echo "Creating $PSU_PATH and granting access to $USER"
sudo mkdir $PSU_PATH
sudo setfacl -m "u:${USER}:rwx" $PSU_PATH

echo "Creating user $PSU_USER and making it the owner of $PSU_PATH"
sudo useradd $PSU_USER -m
sudo chown $PSU_USER -R $PSU_PATH

echo "Downloading PowerShell Universal $PSU_VERSION ($PSU_ARCH)"
wget -q $PSU_URL -O $PSU_FILE

echo "Extracting PSU files to $PSU_PATH"
unzip -o -qq $PSU_FILE -d $PSU_PATH

echo "Make $PSU_EXEC executable"
sudo chmod +x $PSU_EXEC

echo "Creating service configuration"
cat <<EOF > ~/$PSU_SERVICE.service
[Unit]
Description=PowerShell Universal
[Service]
ExecStart=$PSU_EXEC
SyslogIdentifier=psuniversal
User=$PSU_USER
Restart=always
RestartSec=5
[Install]
WantedBy=multi-user.target
EOF

echo "Creating and starting service"
sudo cp -f ~/$PSU_SERVICE.service /etc/systemd/system
sudo systemctl daemon-reload
sudo systemctl enable $PSU_SERVICE
sudo systemctl start $PSU_SERVICE
sudo systemctl status $PSU_SERVICE --no-pager

# If you don't use UFW, you can comment this out
echo "Allow port 5000/tcp"
sudo ufw allow 5000/tcp

# ----
# END
# ----
```

## PowerShell Module

You can use the PowerShell Universal PowerShell module to install the Universal server. To install the module, use `Install-Module`.

```powershell
Install-Module Devolutions.PowerShellUniversal
```

To install the Universal server, you can use `Install-PSUServer`.

```powershell
Install-PSUServer -LatestVersion
```

Running this command on Windows creates and starts a Windows service on your machine. Running this command on Linux creates and starts a systemd service on your machine. Running this command on Mac OS downloads and extracts the PowerShell Universal server.

## Docker

See the Docker page.

## IIS Install

Please visit the IIS hosting documentation for information on how to configure PowerShell Universal as an IIS website.

## Antivirus Configuration

PowerShell Universal takes full advantage of PowerShell and the PowerShell SDK. It includes PowerShell scripts directly in the product. Consider configuring antivirus to allow execution of PowerShell scripts in PowerShell Universal.

### Directories

The following directories contain examples from a standard Windows system of scripts and executable files that you may need to exclude from antivirus checks. Changing paths within appsettings.json or within the installer requires changing which directories are excluded.

| Path                                | Description                                                                                                  |
| ----------------------------------- | ------------------------------------------------------------------------------------------------------------ |
| `%ProgramData%\PowerShellUniversal` | Contains log files and appsettings.json                                                                      |
| `%ProgramData%\UniversalAutomation` | Contains PowerShell scripts and artifacts. Contains the single file database when not using SQL integration. |
| `%ProgramFiles%\Universal`          | Contains PowerShell Universal application executables, libraries and modules.                                |

### Executables

It may be necessary to exclude certain executables that run PowerShell scripts. The below is a list of executables that run PowerShell from PowerShell Universal.

| Name                         | Description                                           |
| ---------------------------- | ----------------------------------------------------- |
| Universal.Server.exe         | The PowerShell Universal core service.                |
| PowerShellUniversal.Host.exe | The PowerShell Universal host environment executable. |
| pwsh.exe                     | PowerShell 7.x                                        |
| PowerShell.exe               | PowerShell 5.x                                        |

## Default Admin Name and Password

You can use the `$ENV:PSUDefaultAdminName` and `$ENV:PSUDefaultAdminPassword` environment variables to change this behavior. These values are only used if no administrator account already exists. This is useful for cloud-based installations.

## Agent

The PowerShell Universal Agent executes Event Hub actions. Install it depending on your environment:

### Windows (MSI)

The PowerShell Universal Agent MSI is on our download page. After installing the MSI, a PowerShell Universal Agent service runs on your machine. Configure it to connect to PowerShell Universal.

### ZIP

ZIP files for each platform we support are on our downloads page. Each ZIP contains a `PSUAgent.exe` or `PSUAgent` file that can start an agent. Run the process as a service for it to start whenever the machine reboots.

### Docker

The `devolutions/powershell-universal-agent:latest` container image provides the PowerShell Universal Agent as a Linux docker container.

```
docker pull devolutions/powershell-universal-agent:latest
```

## Next Steps

At this point, Universal is up and running. Visit `http://localhost:5000` or your default port to navigate to the admin console. Log in with the default admin name and password or create a default admin account.


---

# Agent Instructions
This documentation is published with GitBook. GitBook is the documentation platform designed so that both humans and AI agents can read, navigate, and reason over technical content effectively. Learn more at gitbook.com.

## Querying This Documentation
If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter, and the optional `goal` query parameter:

```
GET https://docs.devolutions.net/powershell-universal/getting-started.md?ask=<question>&goal=<endgoal>
```

`ask` is the immediate question: it should be specific, self-contained, and written in natural language.
`goal` is optional and describes the broader end goal you are ultimately trying to accomplish on behalf of the user. GitBook uses it to tailor the answer towards what is most useful for that goal.

The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
