Забудьте про базовые Set-Alias ll Get-ChildItem. Это детский сад. Сегодня я покажу пошаговый процесс настройки моего рабочего профиля, который использую каждый день.
Здесь будут горячие клавиши PSReadLine, которые взрывают мозг, функции для Git и Docker, и алиасы с параметрами, о которых вы даже не подозревали. Пройдём все шаги от создания файла профиля до финальной сборки — и вы получите инструмент, который экономит мне часы каждую неделю.
👋 Подписывайтесь на канал «Настройки Windows» — здесь я делюсь тем, что реально использую в работе, а не пересказываю документацию. 🚀 Ставьте лайк, если хотите видеть больше инсайдерских фишек!
🛡️ ВЗНОС В РАЗВИТИЕ КАНАЛА И СОЗДАНИЕ ПОЛЕЗНЫХ СКРИПТОВ 🛡️
🛠 Шаг 1. Создаём файл профиля
Прежде чем добавлять крутые фишки, нужно убедиться, что у нас есть файл $PROFILE, куда мы всё это запишем. У разных версий PowerShell разные пути, но нам не нужно их запоминать — консоль сама знает, где он должен лежать.
Откройте PowerShell и вставьте эту команду:
if (!(Test-Path $PROFILE)) { New-Item $PROFILE -Force }; notepad $PROFILE
Этот однострочник проверит, существует ли файл профиля. Если нет — принудительно создаст его, а затем сразу же откроет в стандартном Блокноте. Теперь у нас есть чистый холст для творчества. Для быстрого доступа, вводим эту же команду при открытии.
🚀 Шаг 2. Подключаем PSReadLine — чит-код для консоли
Большинство даже не знают, что в PowerShell есть модуль PSReadLine, который добавляет горячие клавиши как в VS Code. Но по умолчанию он настроен слабо. Давайте это исправим.
Добавьте в начало вашего $PROFILE: (Сохраняем в UTF-8, вообще это стоит навсегда запомнить, это нужно сделать только 1 раз, потом просто сохранять)
# Настраиваем PSReadLine для максимального комфорта
Set-PSReadLineOption -PredictionSource History
Set-PSReadLineOption -PredictionViewStyle ListView
Set-PSReadLineOption -HistoryNoDuplicates
Set-PSReadLineOption -HistorySearchCursorMovesToEnd
# Горячие клавиши, которые меняют всё
Set-PSReadLineKeyHandler -Key Ctrl+d -Function DeleteCharOrExit
Set-PSReadLineKeyHandler -Key Ctrl+w -Function BackwardDeleteWord
Set-PSReadLineKeyHandler -Key Alt+d -Function DeleteWord
Set-PSReadLineKeyHandler -Key Ctrl+LeftArrow -Function BackwardWord
Set-PSReadLineKeyHandler -Key Ctrl+RightArrow -Function ForwardWord
Set-PSReadLineKeyHandler -Key UpArrow -Function HistorySearchBackward
Set-PSReadLineKeyHandler -Key DownArrow -Function HistorySearchForward
Set-PSReadLineKeyHandler -Key Tab -Function MenuComplete
Что это даёт:
- Ctrl+W — удаляет слово назад (как в браузере)
- Alt+D — удаляет слово вперёд
- Ctrl+Стрелки — прыгает по словам, а не по символам
- Стрелки вверх/вниз — ищут по истории (начали писать git, нажали вверх — видите только команды git)
- Tab — показывает меню с вариантами автодополнения
Это не просто удобно. Это ускоряет работу в консоли в 3-4 раза.
⚡ Шаг 3. Добавляем умные алиасы с параметрами
Обычные алиасы вроде Set-Alias ll Get-ChildItem бесполезны, потому что не умеют передавать параметры. Но мы можем создать функции-алиасы, которые делают магию.
Добавьте следующий блок в ваш $PROFILE:
# Умные алиасы с параметрами
function ll { Get-ChildItem -Force | Format-Table -AutoSize }
function la { Get-ChildItem -Force -Hidden | Format-Table -AutoSize }
function .. { Set-Location .. }
function ... { Set-Location ..\.. }
# Git-алиасы (если используете Git)
function gs { git status }
function ga { git add . }
function gc { param($m) git commit -m $m }
function gp { git push }
function gl { git log --oneline --graph --decorate -20 }
function gd { git diff }
# Docker-алиасы
function dps { docker ps --format "table {{.Names}}\t{{.Status}}\t{{.Ports}}" }
function dimg { docker images --format "table {{.Repository}}\t{{.Tag}}\t{{.Size}}" }
function dcu { docker-compose up -d }
function dcd { docker-compose down }
# Быстрый доступ к системным папкам
function docs { Set-Location $env:USERPROFILE\Documents }
function dloads { Set-Location $env:USERPROFILE\Downloads }
function desk { Set-Location $env:USERPROFILE\Desktop }
Реальный пример экономии времени:
Вместо git log --oneline --graph --decorate -20 вы пишете gl.
Вместо docker ps --format "table {{.Names}}\t{{.Status}}\t{{.Ports}}" — просто dps.
Это экономит секунды на каждой команде, но за день набегает 15-20 минут.
И ещё много полезного.
🎯 Шаг 4. Внедряем функции для реальных задач
Вот мои рабочие лошадки. Эти функции я использую ежедневно, и они закрывают 80% рутинных задач.
Добавьте этот блок в ваш $PROFILE:
# Быстрый поиск файлов по содержимому
function fsearch {
param(
[Parameter(Mandatory=$true)]$Pattern,
$Path = "."
)
Get-ChildItem -Path $Path -Recurse -File -ErrorAction SilentlyContinue |
Select-String -Pattern $Pattern -ErrorAction SilentlyContinue |
Select-Object Path, LineNumber, Line -Unique |
Format-Table -AutoSize
}
# Быстрое создание структуры проекта
function newproj {
param([Parameter(Mandatory=$true)]$Name)
$base = "$env:USERPROFILE\Projects\$Name"
New-Item -ItemType Directory -Path $base -Force | Out-Null
New-Item -ItemType Directory -Path "$base\src" -Force | Out-Null
New-Item -ItemType Directory -Path "$base\tests" -Force | Out-Null
New-Item -ItemType File -Path "$base\README.md" -Force | Out-Null
New-Item -ItemType File -Path "$base\.gitignore" -Force | Out-Null
Set-Location $base
Write-Host "✅ Проект $Name создан в $base" -ForegroundColor Green
}
# Быстрая очистка системы (безопасная)
function clean-sys {
Write-Host "🧹 Очистка временных файлов..." -ForegroundColor Yellow
Remove-Item -Path $env:TEMP\* -Recurse -Force -ErrorAction SilentlyContinue
Remove-Item -Path "C:\Windows\Temp\*" -Recurse -Force -ErrorAction SilentlyContinue
Write-Host "✅ Временные файлы удалены" -ForegroundColor Green
Write-Host "🗑 Очистка корзины..." -ForegroundColor Yellow
Clear-RecycleBin -Force -ErrorAction SilentlyContinue
Write-Host "✅ Корзина очищена" -ForegroundColor Green
}
# Быстрый пинг с визуализацией
function pingx {
param([Parameter(Mandatory=$true)]$Host)
Test-Connection -ComputerName $Host -Count 10 |
Select-Object Address, ResponseTime, StatusCode |
Format-Table -AutoSize
}
# Быстрая информация о сети
function netinfo {
$ip = (Get-NetIPAddress -AddressFamily IPv4 |
Where-Object {$_.InterfaceAlias -notlike "*Loopback*" -and $_.IPAddress -ne "127.0.0.1"} |
Select-Object -First 1).IPAddress
$gateway = (Get-NetRoute -DestinationPrefix "0.0.0.0/0" | Select-Object -First 1).NextHop
$dns = (Get-DnsClientServerAddress -AddressFamily IPv4 |
Where-Object {$_.ServerAddresses -ne $null} |
Select-Object -First 1).ServerAddresses -join ", "
Write-Host "🌐 Сетевая информация:" -ForegroundColor Cyan
Write-Host "IP-адрес: $ip" -ForegroundColor Green
Write-Host "Шлюз: $gateway" -ForegroundColor Green
Write-Host "DNS: $dns" -ForegroundColor Green
}
# Быстрое открытие файлов в VS Code
function code-open {
param($Path = ".")
code $Path
}
Set-Alias co code-open
Как это работает в реальной жизни:
- fsearch "connectionString" C:\Users\T.E.X.H.O\Projects — за секунду находит все файлы с строкой подключения во всех проектах
- newproj MyWebApp — создаёт структуру проекта за 2 секунды
- clean-sys — очищает систему без лишних вопросов
- netinfo — показывает всю сетевую информацию одной командой
⚙ Шаг 5. Финальная сборка — полный профиль для копирования + инфо приветствие.
💳 Донат через Ozon (от 10 ₽. Получатель: Александр Г.)
Спасибо всем, кто поддерживает меня финансово ! Очень приятно осознавать, что мой контент полезен, а труд не остаётся без внимания ❤️
Если вы не хотите собирать профиль по кусочкам, вот весь код целиком. Просто очистите ваш $PROFILE и вставьте этот блок:
# ==========================================
# ЛИЧНЫЙ ПРОФИЛЬ POWERSHELL
# Авторский профиль для максимальной продуктивности
# ==========================================
# --- PSREADLINE НАСТРОЙКИ ---
Set-PSReadLineOption -PredictionSource History
Set-PSReadLineOption -PredictionViewStyle ListView
Set-PSReadLineOption -HistoryNoDuplicates
Set-PSReadLineOption -HistorySearchCursorMovesToEnd
Set-PSReadLineKeyHandler -Key Ctrl+d -Function DeleteCharOrExit
Set-PSReadLineKeyHandler -Key Ctrl+w -Function BackwardDeleteWord
Set-PSReadLineKeyHandler -Key Alt+d -Function DeleteWord
Set-PSReadLineKeyHandler -Key Ctrl+LeftArrow -Function BackwardWord
Set-PSReadLineKeyHandler -Key Ctrl+RightArrow -Function ForwardWord
Set-PSReadLineKeyHandler -Key UpArrow -Function HistorySearchBackward
Set-PSReadLineKeyHandler -Key DownArrow -Function HistorySearchForward
Set-PSReadLineKeyHandler -Key Tab -Function MenuComplete
# --- УМНЫЕ АЛИАСЫ ---
function ll { Get-ChildItem -Force | Format-Table -AutoSize }
function la { Get-ChildItem -Force -Hidden | Format-Table -AutoSize }
function .. { Set-Location .. }
function ... { Set-Location ..\.. }
# Git
function gs { git status }
function ga { git add . }
function gc { param($m) git commit -m $m }
function gp { git push }
function gl { git log --oneline --graph --decorate -20 }
function gd { git diff }
# Docker
function dps { docker ps --format "table {{.Names}}\t{{.Status}}\t{{.Ports}}" }
function dimg { docker images --format "table {{.Repository}}\t{{.Tag}}\t{{.Size}}" }
function dcu { docker-compose up -d }
function dcd { docker-compose down }
# Навигация
function docs { Set-Location $env:USERPROFILE\Documents }
function dloads { Set-Location $env:USERPROFILE\Downloads }
function desk { Set-Location $env:USERPROFILE\Desktop }
# --- ПОЛЕЗНЫЕ ФУНКЦИИ ---
function fsearch {
param([Parameter(Mandatory=$true)]$Pattern, $Path = ".")
Get-ChildItem -Path $Path -Recurse -File -ErrorAction SilentlyContinue |
Select-String -Pattern $Pattern -ErrorAction SilentlyContinue |
Select-Object Path, LineNumber, Line -Unique |
Format-Table -AutoSize
}
function newproj {
param([Parameter(Mandatory=$true)]$Name)
$base = "$env:USERPROFILE\Projects\$Name"
New-Item -ItemType Directory -Path $base -Force | Out-Null
New-Item -ItemType Directory -Path "$base\src" -Force | Out-Null
New-Item -ItemType Directory -Path "$base\tests" -Force | Out-Null
New-Item -ItemType File -Path "$base\README.md" -Force | Out-Null
New-Item -ItemType File -Path "$base\.gitignore" -Force | Out-Null
Set-Location $base
Write-Host "✅ Проект $Name создан" -ForegroundColor Green
}
function clean-sys {
Write-Host "🧹 Очистка временных файлов..." -ForegroundColor Yellow
Remove-Item -Path $env:TEMP\* -Recurse -Force -ErrorAction SilentlyContinue
Remove-Item -Path "C:\Windows\Temp\*" -Recurse -Force -ErrorAction SilentlyContinue
Clear-RecycleBin -Force -ErrorAction SilentlyContinue
Write-Host "✅ Система очищена" -ForegroundColor Green
}
function netinfo {
$ip = (Get-NetIPAddress -AddressFamily IPv4 |
Where-Object {$_.InterfaceAlias -notlike "*Loopback*" -and $_.IPAddress -ne "127.0.0.1"} |
Select-Object -First 1).IPAddress
$gateway = (Get-NetRoute -DestinationPrefix "0.0.0.0/0" | Select-Object -First 1).NextHop
$dns = (Get-DnsClientServerAddress -AddressFamily IPv4 |
Where-Object {$_.ServerAddresses -ne $null} |
Select-Object -First 1).ServerAddresses -join ", "
Write-Host "🌐 IP: $ip | Шлюз: $gateway | DNS: $dns" -ForegroundColor Green
}
# --- ПРИВЕТСТВИЕ ---
function Show-Welcome {
Clear-Host
# Динамически получаем данные системы
$osInfo = Get-CimInstance Win32_OperatingSystem
$os = $osInfo.Caption
$osVersion = $osInfo.Version
$psVersion = $PSVersionTable.PSVersion.ToString()
$uptime = (Get-Date) - $osInfo.LastBootUpTime
$ip = (Get-NetIPAddress -AddressFamily IPv4 |
Where-Object {$_.InterfaceAlias -notlike "*Loopback*" -and $_.IPAddress -ne "127.0.0.1"} |
Select-Object -First 1).IPAddress
$currentUser = $env:USERNAME
$currentDate = Get-Date -Format "dd.MM.yyyy HH:mm"
Write-Host ""
Write-Host " ╔═══════════════════════════════════════════════════════════╗" -ForegroundColor Cyan
Write-Host " ║ ║" -ForegroundColor Cyan
Write-Host " ║ 🚀 PowerShell $psVersion | $os ║" -ForegroundColor Cyan
Write-Host " ║ ║" -ForegroundColor Cyan
Write-Host " ╚═══════════════════════════════════════════════════════════╝" -ForegroundColor Cyan
Write-Host ""
Write-Host " 👤 Пользователь: $currentUser" -ForegroundColor Magenta
Write-Host " 📅 Дата и время: $currentDate" -ForegroundColor Magenta
Write-Host ""
Write-Host " ───────────────────────────────────────────────────────────" -ForegroundColor DarkGray
Write-Host ""
Write-Host " 🖥 Система: $os (Build $osVersion)" -ForegroundColor Green
Write-Host " ⏱ Аптайм: $($uptime.Days) дн. $($uptime.Hours) ч. $($uptime.Minutes) мин." -ForegroundColor Green
Write-Host " 🌐 IP-адрес: $ip" -ForegroundColor Green
Write-Host " 📂 Папка: $(Get-Location)" -ForegroundColor Green
Write-Host ""
Write-Host " ───────────────────────────────────────────────────────────" -ForegroundColor DarkGray
Write-Host ""
Write-Host " ⌨ Горячие клавиши:" -ForegroundColor Yellow
Write-Host " • Ctrl+W — удалить слово назад" -ForegroundColor Gray
Write-Host " • Alt+D — удалить слово вперёд" -ForegroundColor Gray
Write-Host " • Tab — меню автодополнения" -ForegroundColor Gray
Write-Host " • Стрелки — поиск по истории" -ForegroundColor Gray
Write-Host ""
Write-Host " 🎯 Быстрые команды:" -ForegroundColor Cyan
Write-Host " gs (git status) • dps (docker ps) • fsearch • clean-sys • netinfo" -ForegroundColor Cyan
Write-Host ""
Write-Host " 💡 Введите 'help-me' для полной справки по командам" -ForegroundColor DarkYellow
Write-Host ""
}
# Справка по кастомным командам
function help-me {
Write-Host ""
Write-Host " ╔═══════════════════════════════════════════════════════════╗" -ForegroundColor Cyan
Write-Host " ║ 📚 СПРАВКА ПО КОМАНДАМ ║" -ForegroundColor Cyan
Write-Host " ╚═══════════════════════════════════════════════════════════╝" -ForegroundColor Cyan
Write-Host ""
Write-Host " 📂 Навигация:" -ForegroundColor Yellow
Write-Host " ll — список файлов (с скрытыми)" -ForegroundColor Gray
Write-Host " la — список всех файлов (включая скрытые)" -ForegroundColor Gray
Write-Host " .. — перейти в родительскую папку" -ForegroundColor Gray
Write-Host " ... — перейти на 2 уровня вверх" -ForegroundColor Gray
Write-Host " docs — перейти в Documents" -ForegroundColor Gray
Write-Host " dloads — перейти в Downloads" -ForegroundColor Gray
Write-Host " desk — перейти на Desktop" -ForegroundColor Gray
Write-Host ""
Write-Host " 🔧 Git:" -ForegroundColor Yellow
Write-Host " gs — git status" -ForegroundColor Gray
Write-Host " ga — git add ." -ForegroundColor Gray
Write-Host " gc 'msg' — git commit -m 'msg'" -ForegroundColor Gray
Write-Host " gp — git push" -ForegroundColor Gray
Write-Host " gl — git log (красивый)" -ForegroundColor Gray
Write-Host " gd — git diff" -ForegroundColor Gray
Write-Host ""
Write-Host " 🐳 Docker:" -ForegroundColor Yellow
Write-Host " dps — docker ps (таблица)" -ForegroundColor Gray
Write-Host " dimg — docker images (таблица)" -ForegroundColor Gray
Write-Host " dcu — docker-compose up -d" -ForegroundColor Gray
Write-Host " dcd — docker-compose down" -ForegroundColor Gray
Write-Host ""
Write-Host " 🛠 Утилиты:" -ForegroundColor Yellow
Write-Host " fsearch 'pattern' [path] — поиск по содержимому файлов" -ForegroundColor Gray
Write-Host " newproj 'name' — создать структуру проекта" -ForegroundColor Gray
Write-Host " clean-sys — очистка временных файлов" -ForegroundColor Gray
Write-Host " netinfo — информация о сети" -ForegroundColor Gray
Write-Host " pingx 'host' — быстрый пинг" -ForegroundColor Gray
Write-Host " co [path] — открыть в VS Code" -ForegroundColor Gray
Write-Host ""
}
# --- ЗАПУСК ---
Show-Welcome
Сохраните файл (Ctrl+S), закройте Блокнот и перезапустите PowerShell. Готово — ваш терминал теперь работает на вас с первой секунды.
🎯 Что вы получили
- Горячие клавиши PSReadLine — работа в консоли как в VS Code
- Умные алиасы для Git и Docker — экономия 15-20 минут в день
- Функции для реальных задач — поиск по файлам, создание проектов, очистка системы
- Продвинутое приветствие с автоматическим определением версии PowerShell и Windows
Этот профиль я использую каждый день уже 2 года. Он работает на Windows 10 (с ESU), Windows 11 и любой актуальной версии PowerShell без единой ошибки. Я проверил лично!
Ваш терминал теперь работает как швейцарские часы, экономя десятки часов рутины каждый месяц. Но есть одна вещь, которую не закроет ни один, даже самый продвинутый профиль — человеческий фактор. Вы можете забыть сделать бэкап перед запуском рискованного скрипта или установкой сомнительного софта.
👍 Если статья была полезной, поддержите её лайком и поделитесь с коллегами, которым тоже надоела рутина в консоли.🔔 Обязательно подписывайтесь на канал «Настройки Windows», чтобы не пропустить следующие инсайдерские фишки!
Твой PowerShell теперь настроен идеально. Но что, если система сама будет делать бэкапы за тебя?
В следующей статье мы напишем фоновую утилиту, которая будет автоматически создавать точки восстановления каждую неделю, пока ты пьёшь кофе.
#powershell #windows11 #windows10 #настройкиwindows #автоматизация #скрипты #ит #системноеадминистрирование #оптимизацияпк #лайфхакидляпк #команднаястрока #psreadline #git #docker #devops #админ #кодинг #настройкапк #windows25h2 #microsoft #sysadmin #terminal #консоль #продуктивность #hotkeys #алиасы #функции #продвинутыйпрофиль #бэкап #точкивосстановления
✴️ Дорогие друзья. Если статья оказалась полезна, одна СТЕЛЛА от вас = мощная реклама для сотен людей. Поддержите контент, чтобы проблемы и решения находились быстрее! ✴️
С уважением. Александр, канал "Настройки Windows" на Яндекс.Дзен