# Hide the Console Window When Auto-Starting WSL2


WSL2 automatically stops the instance when all terminal windows are closed. While you can mitigate this by setting `vmIdleTimeout=-1` and `instanceIdleTimeout=-1` in `.wslconfig`, some versions still terminate the instance. A reliable approach is to launch a persistent process at login to keep the instance alive, but running `wsl.exe` directly through Task Scheduler pops up a black console window. This post covers wrapping it in a VBS script to hide that window.

## Create the VBS Launch Script

Create a VBS script file on Windows, for example `C:\Users\YourUsername\start-wsl.vbs`, with the following content:

```vbs
Set WshShell = CreateObject("WScript.Shell")
WshShell.Run "wsl.exe -d archlinux -u root /bin/bash -c ""sleep infinity""", 0, False
```

Replace `archlinux` with your WSL distribution name (run `wsl -l` in PowerShell to check).

`WshShell.Run` parameter explanation:

- Second parameter `0` — hide the window, no UI shown
- Third parameter `False` — do not wait for the child process to finish, the script exits immediately

## Create the Scheduled Task

Run the following commands in PowerShell to create a scheduled task that runs at logon:

```powershell
$action = New-ScheduledTaskAction -Execute "wscript.exe" -Argument '"C:\Users\YourUsername\start-wsl.vbs"'
$trigger = New-ScheduledTaskTrigger -AtLogOn
$settings = New-ScheduledTaskSettingsSet -AllowStartIfOnBatteries -DontStopIfGoingOnBatteries -ExecutionTimeLimit (New-TimeSpan -Seconds 0)
Register-ScheduledTask -TaskName "WSL2 AutoStart" -Action $action -Trigger $trigger -Settings $settings
```

## Verification

Log off and back on (or reboot), then run `wsl -l --running` in PowerShell to confirm the WSL instance is running. No console window will appear during the process.


---

> Author: Nite  
> URL: https://www.nite07.com/en/posts/wsl-autostart-hidden/  

