- Overzicht
- Notatie van variabelen
- Step 1: Scope en opslaglocatie van omgevingsvariabelen
- Step 2: CMD (%VAR%) – Weergeven en instellen
- Step 2-4. Permanent instellen (setx)
- Step 3: Gebruiker- en systeemvariabelen via CMD controleren
- Step 4: PATH veilig bewerken (CMD – Risico)
- Step 5: PowerShell – Weergeven en tijdelijk instellen
- Step 6: Gebruiker- en systeemvariabelen exact uitlezen via PowerShell
- Step 7: Permanent instellen via PowerShell (.NET API / Aanbevolen)
- Step 8: PATH veilig uitbreiden (.NET API / Best practice)
- Step 9: Variabelen verwijderen
- Step 10: Waarden toepassen en controleren
- Step 11: Meerdere variabelen in één keer instellen
- Samenvatting
Overzicht
Windows maakt bij het starten van een proces een afzonderlijke environment-block aan. Dit artikel legt exact uit hoe omgevingsvariabelen werken, wat het verschil is tussen proces-, gebruikers- en systeemvariabelen, hoe ze worden opgeslagen, en hoe je ze via CMD en PowerShell correct uitleest, instelt en persistent maakt.
Notatie van variabelen
| Naam | Voorbeeld | Beschrijving |
|---|---|---|
<<VAR_NAME>> |
PATH |
Naam van de doelvariabele |
<<VALUE>> |
C:\Tools |
In te stellen waarde |
Step 1: Scope en opslaglocatie van omgevingsvariabelen
| Type | Locatie | Bereik | Permanent | Opmerking |
|---|---|---|---|---|
| Procesvariabelen | Geheugen | Alleen huidig proces | Tijdelijk | CMD: set / PowerShell: $env: |
| Gebruikersvariabelen | HKCU\Environment |
Huidige gebruiker | Permanent | setx / .NET API |
| Systeemvariabelen | HKLM\SYSTEM\CurrentControlSet\Control\Session Manager\Environment |
Alle gebruikers | Permanent | setx /M / .NET API (Administrator) |
Proces, gebruiker en systeem zijn strikt gescheiden
- Procesvariabelen: uitsluitend voor de huidige shell
- Gebruikersvariabelen: per gebruiker
- Systeemvariabelen: globaal voor alle gebruikers
- PATH wordt vaak samengesteld getoond: SysteemPATH + GebruikerPATH
Step 2: CMD (%VAR%) – Weergeven en instellen
2-1. Procesvariabelen weergeven
set
2-2. Variabele weergeven
echo %<<VAR_NAME>>%
2-3. Tijdelijk instellen (alleen huidige CMD)
set <<VAR_NAME>>=<<VALUE>>
Step 2-4. Permanent instellen (setx)
Gebruiker (default)
setx <<VAR_NAME>> "<<VALUE>>"
Systeem (Admin, /M verplicht)
setx <<VAR_NAME>> "<<VALUE>>" /M
Kenmerken van setx:
- Geldt niet voor de huidige CMD-sessie
%PATH%wordt geëxpandeerd en permanent vastgezet- Langere waarden kunnen afgesneden worden
Step 3: Gebruiker- en systeemvariabelen via CMD controleren
Gebruikersvariabelen
reg query HKCU\Environment
Systeemvariabelen
reg query "HKLM\SYSTEM\CurrentControlSet\Control\Session Manager\Environment"
Toont exact de ruwe, niet-samengevoegde waarden.
Step 4: PATH veilig bewerken (CMD – Risico)
Niet aanbevolen voorbeeld:
setx PATH "%PATH%;C:\Tools"
Problemen:
%PATH%wordt volledig geëxpandeerd → verlies van%SystemRoot%- REG_EXPAND_SZ → REG_SZ
- Afkapping bij lange PATH-waarden
Gebruik altijd PowerShell/.NET API voor PATH-beheer.
Step 5: PowerShell – Weergeven en tijdelijk instellen
5-1. Procesvariabelen weergeven
Get-ChildItem Env:
5-2. Variabele weergeven
$env:<<VAR_NAME>>
5-3. Tijdelijk instellen
$env:<<VAR_NAME>> = "<<VALUE>>"
Step 6: Gebruiker- en systeemvariabelen exact uitlezen via PowerShell
Gebruikersvariabelen
Get-ItemProperty "HKCU:\Environment"
Systeemvariabelen
Get-ItemProperty "HKLM:\SYSTEM\CurrentControlSet\Control\Session Manager\Environment"
Step 7: Permanent instellen via PowerShell (.NET API / Aanbevolen)
Gebruiker
[System.Environment]::SetEnvironmentVariable("<<VAR_NAME>>","<<VALUE>>","User")
Systeem (Admin)
[System.Environment]::SetEnvironmentVariable("<<VAR_NAME>>","<<VALUE>>","Machine")
Voordelen:
- Geen PATH-afsnijding
- REG_EXPAND_SZ blijft behouden
- Waarden worden veilig bijgewerkt
Step 8: PATH veilig uitbreiden (.NET API / Best practice)
$add = "C:\Tools"
$current = [System.Environment]::GetEnvironmentVariable("PATH","Machine")
$new = ($current.TrimEnd(';') + ';' + $add).Trim(';')
[System.Environment]::SetEnvironmentVariable("PATH",$new,"Machine")
Step 9: Variabelen verwijderen
9-1. Proces (enkel huidige PowerShell)
Remove-Item Env:<<VAR_NAME>> -ErrorAction SilentlyContinue
9-2. Permanent verwijderen (Registry)
Gebruiker
Remove-ItemProperty -Path "HKCU:\Environment" -Name "<<VAR_NAME>>" -ErrorAction SilentlyContinue
Systeem
Remove-ItemProperty -Path "HKLM:\SYSTEM\CurrentControlSet\Control\Session Manager\Environment" -Name "<<VAR_NAME>>" -ErrorAction SilentlyContinue
Step 10: Waarden toepassen en controleren
10-1. Proceswaarde controleren
Get-ChildItem Env:<<VAR_NAME>>
10-2. CMD-controle
echo %<<VAR_NAME>>%
10-3. Persistente waarde opnieuw laden
$env:<<VAR_NAME>> = [System.Environment]::GetEnvironmentVariable("<<VAR_NAME>>","User")
Step 11: Meerdere variabelen in één keer instellen
Gebruikersvariabelen
$vars = @{
"APPDATA_DIR" = "C:\AppData"
"LOG_PATH" = "C:\Logs"
"TOOLS" = "C:\Tools"
}
foreach ($v in $vars.GetEnumerator()) {
[System.Environment]::SetEnvironmentVariable($v.Key,$v.Value,"User")
}
Systeemvariabelen
$sysVars = @{
"JAVA_HOME" = "C:\Program Files\Java\<<VALUE>>"
}
foreach ($v in $sysVars.GetEnumerator()) {
[System.Environment]::SetEnvironmentVariable($v.Key,$v.Value,"Machine")
}
Samenvatting
- Proces-, gebruiker- en systeemvariabelen bestaan onafhankelijk van elkaar.
- CMD en PowerShell tonen verschillende samengestelde waarden.
- Gebruik HKCU/HKLM om de echte waarden te zien.
- setx is bruikbaar, maar ongeschikt voor PATH.
- De .NET API is de meest veilige en betrouwbare methode.
