8. Переменные среды Windows
Переменные среды в Windows
Заголовок раздела «Переменные среды в Windows»Переменные среды в Windows работают так же как в Linux, но синтаксис отличается. Это именованные значения, доступные процессам: пути к программам, конфигурация приложений, учётные данные.
Просмотр переменных
Заголовок раздела «Просмотр переменных»# В PowerShell$env:PATH # значение PATH$env:USERNAME # имя пользователя$env:USERPROFILE # домашняя директория$env:COMPUTERNAME # имя компьютера$env:OS # операционная система$env:TEMP # временная директория
# Все переменные окруженияGet-ChildItem Env: # через провайдер Env:[System.Environment]::GetEnvironmentVariables()
# В CMDecho %USERNAME%echo %PATH%set # все переменныеset PATH # все переменные начинающиеся с PATHРабота с 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Установка переменных через PowerShell
Заголовок раздела «Установка переменных через PowerShell»# Текущая сессия (временно)$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 # текущая сессияsetx — постоянная установка в CMD
Заголовок раздела «setx — постоянная установка в CMD»REM Установить переменную для пользователяsetx MY_VAR "hello"
REM Установить для системы (требует администратора)setx MY_VAR "hello" /M
REM Добавить путь к PATHsetx PATH "%PATH%;C:\MyTools"
REM ВНИМАНИЕ: setx работает только для НОВЫХ сессий!REM В текущей CMD/PowerShell изменение не будет видноSystem Properties — графический способ
Заголовок раздела «System Properties — графический способ»Для постоянных изменений через GUI:
Win+R→sysdm.cpl→ вкладка “Advanced”- Кнопка “Environment Variables”
- Редактировать “User variables” или “System variables”
Или через Settings:
- Settings → System → About → Advanced system settings
PowerShell профиль — постоянные настройки
Заголовок раздела «PowerShell профиль — постоянные настройки»PowerShell профиль — это скрипт, запускаемый при каждом старте PowerShell. Аналог .bashrc в Linux.
# Путь к профилю$PROFILE # путь к файлу профиля$PROFILE.CurrentUserCurrentHost # для текущего пользователя и хоста
# Создать профиль если не существуетif (-not (Test-Path $PROFILE)) { New-Item -Path $PROFILE -ItemType File -Force}
# Открыть для редактированияnotepad $PROFILEcode $PROFILE # в VS CodeТипичное содержимое PowerShell профиля:
# Переменные окружения для разработки$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 файлов в PowerShell
Заголовок раздела «Загрузка .env файлов в PowerShell»# Функция для загрузки .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 для постоянных настроек рабочего окружения!