Перейти к содержимому

8. Переменные среды Windows

Переменные среды в Windows работают так же как в Linux, но синтаксис отличается. Это именованные значения, доступные процессам: пути к программам, конфигурация приложений, учётные данные.

Окно терминала
# В PowerShell
$env:PATH # значение PATH
$env:USERNAME # имя пользователя
$env:USERPROFILE # домашняя директория
$env:COMPUTERNAME # имя компьютера
$env:OS # операционная система
$env:TEMP # временная директория
# Все переменные окружения
Get-ChildItem Env: # через провайдер Env:
[System.Environment]::GetEnvironmentVariables()
# В CMD
echo %USERNAME%
echo %PATH%
set # все переменные
set PATH # все переменные начинающиеся с PATH

PATH определяет, где Windows ищет исполняемые файлы:

Окно терминала
# Посмотреть PATH красиво
$env:PATH -split ";" # каждый путь на новой строке
$env:PATH -split ";" | Sort-Object # отсортировано
# Добавить в PATH (текущая сессия)
$env:PATH = "$env:PATH;C:\MyTools"
# Проверить где находится программа
Get-Command node # Where-Object аналог which
(Get-Command python).Source
Окно терминала
# Текущая сессия (временно)
$env:MY_VAR = "hello"
$env:DATABASE_URL = "postgresql://localhost/mydb"
# Постоянно для текущего пользователя
[System.Environment]::SetEnvironmentVariable(
"MY_VAR",
"hello",
"User"
)
# Постоянно для всей системы (нужны права администратора)
[System.Environment]::SetEnvironmentVariable(
"MY_VAR",
"hello",
"Machine"
)
# Прочитать сохранённое значение
[System.Environment]::GetEnvironmentVariable("MY_VAR", "User")
# Удалить переменную
[System.Environment]::SetEnvironmentVariable("MY_VAR", $null, "User")
Remove-Item Env:MY_VAR # текущая сессия
Окно терминала
REM Установить переменную для пользователя
setx MY_VAR "hello"
REM Установить для системы (требует администратора)
setx MY_VAR "hello" /M
REM Добавить путь к PATH
setx PATH "%PATH%;C:\MyTools"
REM ВНИМАНИЕ: setx работает только для НОВЫХ сессий!
REM В текущей CMD/PowerShell изменение не будет видно

Для постоянных изменений через GUI:

  1. Win+Rsysdm.cpl → вкладка “Advanced”
  2. Кнопка “Environment Variables”
  3. Редактировать “User variables” или “System variables”

Или через Settings:

  • Settings → System → About → Advanced system settings

PowerShell профиль — это скрипт, запускаемый при каждом старте PowerShell. Аналог .bashrc в Linux.

Окно терминала
# Путь к профилю
$PROFILE # путь к файлу профиля
$PROFILE.CurrentUserCurrentHost # для текущего пользователя и хоста
# Создать профиль если не существует
if (-not (Test-Path $PROFILE)) {
New-Item -Path $PROFILE -ItemType File -Force
}
# Открыть для редактирования
notepad $PROFILE
code $PROFILE # в VS Code

Типичное содержимое PowerShell профиля:

~/.config/powershell/Microsoft.PowerShell_profile.ps1
# Переменные окружения для разработки
$env:NODE_ENV = "development"
$env:EDITOR = "code"
# Добавить пути
$env:PATH = "$env:PATH;$env:USERPROFILE\.local\bin"
# Полезные алиасы
Set-Alias vim "C:\Program Files\Vim\vim91\vim.exe"
Set-Alias touch New-Item
# Функции
function which($name) {
Get-Command $name -ErrorAction SilentlyContinue | Select-Object -ExpandProperty Definition
}
function mkcd($path) {
New-Item -ItemType Directory -Path $path -Force
Set-Location $path
}
function uptime {
(Get-Date) - (Get-CimInstance Win32_OperatingSystem).LastBootUpTime
}
# Настройка приглашения
function prompt {
$location = (Get-Location).Path.Replace($env:USERPROFILE, "~")
Write-Host "$location" -ForegroundColor Cyan -NoNewline
return "> "
}
Write-Host "PowerShell профиль загружен!" -ForegroundColor Green
Окно терминала
# Функция для загрузки .env файла
function Import-Env {
param ([string]$Path = ".env")
if (-not (Test-Path $Path)) {
Write-Warning ".env файл не найден: $Path"
return
}
Get-Content $Path | ForEach-Object {
if ($_ -match "^\s*([^#][^=]+)\s*=\s*(.*)\s*$") {
$key = $matches[1].Trim()
$value = $matches[2].Trim().Trim('"').Trim("'")
[System.Environment]::SetEnvironmentVariable($key, $value, "Process")
Write-Verbose "Загружен: $key"
}
}
}
# Использование
Import-Env ".env"
$env:DATABASE_URL # теперь доступно
Окно терминала
# 1. Посмотри все переменные окружения
Get-ChildItem Env: | Sort-Object Name | Select-Object -First 20
# 2. Посмотри PATH
$env:PATH -split ";" | Where-Object { $_ -ne "" } | Sort-Object
# 3. Создай временную переменную
$env:MY_TEST = "Hello PowerShell"
$env:MY_TEST
# 4. Создай постоянную переменную для пользователя
[System.Environment]::SetEnvironmentVariable("MY_TEST_PERM", "persistent", "User")
# 5. Открой новую сессию PowerShell и проверь
# Start-Process powershell -ArgumentList '-c "echo $env:MY_TEST_PERM"'
# 6. Создай/обнови профиль
if (-not (Test-Path $PROFILE)) { New-Item -Path $PROFILE -ItemType File -Force }
Add-Content $PROFILE "`n# Мои настройки"
Add-Content $PROFILE 'Set-Alias ll "Get-ChildItem"'
# 7. Перезагрузи профиль
. $PROFILE
# 8. Проверь алиас
ll

Переменные среды — стандартный способ конфигурации приложений. Используй профиль PowerShell для постоянных настроек рабочего окружения!