How to Configure Windows Terminal and PowerShell Profiles
A complete walkthrough customizing Windows Terminal's settings.json and your PowerShell profile script — so your preferred shell, prompt, and startup behavior are there every time you open a terminal.
Windows Terminal and PowerShell each have their own distinct configuration layer — the terminal’s settings.json controls appearance and shell profiles, while your PowerShell profile script controls what runs every time a PowerShell session starts. This covers both.
Step 1: open Windows Terminal’s settings file
Windows Terminal → Ctrl+, (or Settings from the dropdown menu)
→ click "Open JSON file" at the bottom left
This opens settings.json directly for editing, rather than only exposing options through the GUI settings pages.
Step 2: set a default shell profile
{
"defaultProfile": "{574e775e-4f2a-5b96-ac1e-a2962a402336}",
"profiles": {
"list": [ ... ]
}
}
Each installed shell (PowerShell, Command Prompt, WSL distributions) has its own GUID in the profiles list — setting defaultProfile to match one determines which shell opens by default when you launch a new terminal tab.
Step 3: customize a profile’s appearance
{
"name": "PowerShell",
"colorScheme": "One Half Dark",
"font": { "face": "Cascadia Code", "size": 11 },
"opacity": 90,
"useAcrylic": true
}
Step 4: add a custom color scheme
"schemes": [
{
"name": "MyScheme",
"background": "#0C0C0C",
"foreground": "#CCCCCC",
"black": "#0C0C0C",
"blue": "#0037DA"
}
]
Reference it in a profile with "colorScheme": "MyScheme".
Step 5: find or create your PowerShell profile script
$PROFILE
This prints the path PowerShell expects your personal profile script at — a file that doesn’t exist by default, but that PowerShell will run automatically every time a new session starts, once created.
Step 6: create the profile file if it doesn’t exist yet
if (!(Test-Path $PROFILE)) { New-Item -Path $PROFILE -Type File -Force }
notepad $PROFILE
Step 7: add customizations to the profile script
# custom prompt
function prompt { "PS $($PWD.Path)> " }
# aliases
Set-Alias ll Get-ChildItem
# environment variables
$env:EDITOR = "code"
# import a module every session
Import-Module posh-git
Anything valid in a .ps1 script can go here — it runs at the start of every new PowerShell session, making it the right place for aliases, environment setup, and custom prompt logic you want available consistently.
Step 8: use a separate profile for different PowerShell hosts, if needed
$PROFILE.CurrentUserCurrentHost # this specific host (e.g. Windows Terminal)
$PROFILE.CurrentUserAllHosts # every PowerShell host for this user
PowerShell distinguishes between a profile for the current specific host and one for all hosts — relevant if you use PowerShell both inside Windows Terminal and inside another environment (like an IDE’s integrated terminal) and want different behavior in each.
Why separating these two configuration layers matters
Windows Terminal’s settings.json controls how the terminal application itself looks and which shells are available; your PowerShell profile controls what happens inside a PowerShell session once it starts, regardless of which terminal application launched it. Confusing the two — for instance, expecting a PowerShell alias to somehow affect Command Prompt tabs — is a common source of “why isn’t my customization working” confusion that understanding this separation resolves immediately.