Блок 8 · 8
Как пользоваться PowerShell в Windows 11?
Открываем Windows PowerShell и PowerShell 7, работаем с объектами, файлами, процессами, службами, политикой выполнения и WinGet.
🎯 Краткое описание
PowerShell — командная оболочка и язык автоматизации Windows. В отличие от старой CMD, он передаёт между командами не только текст, а полноценные объекты со свойствами: процессы, службы, файлы, сетевые адаптеры и многое другое.
Звучит серьёзно, но начинать можно с простых команд. PowerShell не требует сразу писать сценарий на триста строк и называть его финал_точно_рабочий_v7.ps1. Сначала научимся смотреть данные, фильтровать их и безопасно выполнять небольшие действия.
🧩 Когда это пригодится
- быстро получить сведения о системе;
- найти, отфильтровать и обработать файлы;
- проверить процессы, службы и диски;
- установить или обновить программы через WinGet;
- повторить одну операцию для нескольких объектов;
- автоматизировать обслуживание в
.ps1; - выполнить современную инструкцию Microsoft.
🔍 Windows PowerShell и PowerShell 7
В Windows 11 обычно присутствует Windows PowerShell 5.1 — встроенная версия, запускаемая командой powershell.exe. PowerShell 7 — современная кроссплатформенная версия pwsh.exe, которая устанавливается отдельно и обновляется независимо.
Для старых системных модулей иногда нужна версия 5.1, а для новых сценариев удобнее 7. Они могут жить рядом и не обязаны устраивать дуэль за синее окно.
Проверь текущую версию:
$PSVersionTable
Главная строка — PSVersion. Не путай оболочку с Windows Terminal: Terminal показывает вкладки и профили, а PowerShell выполняет команды внутри вкладки.
🧭 Как открыть PowerShell
- Нажми
Win + X. - Выбери Терминал или Терминал (Администратор).
- Проверь название профиля во вкладке.
Через поиск введи PowerShell. Для системных команд нажми Запуск от имени администратора.
Чтобы открыть конкретную встроенную версию, нажми Win + R, введи:
powershell
Для PowerShell 7 используется:
pwsh
Повышенные права нужны не всегда. Чтение списка процессов и работа со своими документами выполняются в обычном окне. Администраторский запуск используй тогда, когда команда меняет службы, защищённые файлы или общесистемные параметры.
📦 Команды состоят из глагола и существительного
Командлеты обычно называются по схеме Глагол-Существительное:
Get-Process
Get-Service
Get-ChildItem
Set-Location
Copy-Item
Найти команду:
Get-Command *Service*
Открыть справку:
Get-Help Get-Service -Examples
Обновить локальную справку можно командой Update-Help от администратора. Если примеры в Интернете расходятся с установленной версией модуля, встроенная справка часто честнее памяти автора ролика.
📁 Навигация и файлы
Посмотреть текущую папку:
Get-Location
Перейти по пути:
Set-Location "C:\Users\user\Documents\Сайт Deenet.ru\Deenet.ru"
Короткий вариант тоже работает:
cd "C:\Users\user\Documents\Сайт Deenet.ru\Deenet.ru"
В PowerShell не нужно отдельно переключать диск командой C: перед полным путём. Но кавычки вокруг пути с пробелами всё равно обязательны — пробел не стал умнее только потому, что консоль посинела.
Список файлов:
Get-ChildItem
Найти все Markdown-файлы во вложенных папках:
Get-ChildItem -Path . -Filter *.md -Recurse
Создать папку:
New-Item -ItemType Directory -Path ".\Backup"
Скопировать:
Copy-Item -Path ".\article.md" -Destination ".\Backup\article.md"
Удаление:
Remove-Item -Path ".\temp.txt"
⚠️
Remove-Itemобычно обходит Корзину. Особенно осторожно используй-Recurseи-Force. Сначала выполни ту же команду с-WhatIf, если параметр поддерживается.
Пример безопасной проверки:
Remove-Item -Path ".\old" -Recurse -WhatIf
PowerShell покажет предполагаемые действия, но не выполнит их. Это репетиция перед премьерой, где декорации — твои файлы.
🔗 Главная сила: конвейер объектов
Показать процессы, потребляющие больше 500 МБ памяти:
Get-Process |
Where-Object WorkingSet64 -gt 500MB |
Sort-Object WorkingSet64 -Descending |
Select-Object Name, Id, CPU, WorkingSet64
Команды передают объекты по символу |. Where-Object фильтрует, Sort-Object сортирует, Select-Object оставляет нужные свойства.
Экспортировать службы в CSV:
Get-Service |
Select-Object Name, DisplayName, Status, StartType |
Export-Csv "$env:USERPROFILE\Desktop\services.csv" -NoTypeInformation -Encoding UTF8
Получается таблица, а не бесконечный скриншот. Но помни: экспорт состояния ничего не чинит, он лишь помогает увидеть картину без прыгающих строк.
⚙️ Процессы, службы и оборудование
Найти процесс:
Get-Process -Name explorer
Перезапустить Проводник:
Stop-Process -Name explorer -Force
Start-Process explorer.exe
Посмотреть остановленные службы:
Get-Service | Where-Object Status -eq Stopped
Не запускай все остановленные службы подряд. Многие работают по требованию и в простое обязаны быть остановлены. Список Stopped — не очередь пациентов в реанимацию.
Базовое состояние физических дисков:
Get-PhysicalDisk | Select-Object FriendlyName, MediaType, HealthStatus, OperationalStatus, Size
Сетевые адаптеры:
Get-NetAdapter | Sort-Object Status, Name
Часть команд доступна только от администратора или в определённых редакциях Windows. Читай ошибку полностью: красный текст иногда содержит полезную причину, а не просто эмоциональную реакцию оболочки.
📥 WinGet: установка и обновление программ
Найти пакет:
winget search "PowerShell"
Посмотреть установленные программы и обновления:
winget list
winget upgrade
Обновить конкретный пакет:
winget upgrade --id Microsoft.PowerShell
Всегда сверяй Id, источник и издателя. Поиск может вернуть несколько похожих названий. Фраза «я выбрал первый PowerShell из списка» звучит терпимо, а с менее известной программой уже может стать началом детектива.
🔐 Политика выполнения сценариев
Узнать политики:
Get-ExecutionPolicy -List
Для текущего пользователя часто используют:
Set-ExecutionPolicy -Scope CurrentUser RemoteSigned
Эта политика разрешает локальные сценарии и требует подписи для сценариев, помеченных как загруженные из Интернета. Она не является антивирусом и не проверяет смысл кода.
Не устанавливай Unrestricted или Bypass на всю систему только потому, что чужой скрипт попросил «отключить защиту». Для разового доверенного запуска лучше понять блокировку, проверить файл и выбрать минимальную область действия.
Сценарий, скачанный из Интернета, можно просмотреть Блокнотом или редактором кода. Обращай внимание на Remove-Item, изменение Defender, скачивание исполняемых файлов, задачи планировщика, реестр и закодированные строки. Слово cleanup в имени не выдаёт автору лицензию на уборку твоего диска.
🧾 Переменные и простые сценарии
Переменная начинается с $:
$reportPath = "$env:USERPROFILE\Desktop\pc-report.txt"
Get-ComputerInfo | Out-File $reportPath -Encoding utf8
Многострочный here-string начинается с @' в конце отдельной строки и заканчивается '@ в начале отдельной строки:
$text = @'
# Тестовый файл
Первая строка
Вторая строка
'@
После заголовка @' нельзя размещать другие символы на той же строке. Конструкция @'n# Testn'@ не создаёт переносы — она создаёт синтаксическую ошибку и лёгкое недоверие к букве n.
⚠️ Частые ошибки и решения
«Команда не найдена»
Проверь написание, версию PowerShell, наличие модуля и PATH. Команда может существовать в PowerShell 7, но отсутствовать в 5.1, или наоборот.
Сценарий запрещён политикой
Проверь Get-ExecutionPolicy -List, источник файла и подпись. Не отключай политику глобально вслепую.
Путь с пробелом разбился
Заключи его в кавычки. Для запуска исполняемого файла по строковому пути используй оператор вызова:
& "C:\Program Files\App\app.exe" --help
CMD-команда ведёт себя иначе
PowerShell разбирает кавычки, переменные и специальные символы по своим правилам. Для сложной старой команды можно явно вызвать cmd /c, но лучше проверить нативный синтаксис.
Вывод обрезан таблицей
Используй Format-List * для просмотра свойств или Export-Csv для анализа. Форматирование оставляй в конце конвейера.
📦 Практические кейсы
Кейс 1. Нужно найти большие файлы
Через Get-ChildItem -Recurse, фильтр по Length и сортировку нашли старые образы. Удаление делали вручную после проверки, а не добавляли Remove-Item в первую же команду.
Кейс 2. Обновление программ
winget upgrade показал доступные версии. Пакеты обновляли по точному Id, а проблемную программу оставили на прежней версии до резервной копии настроек.
Кейс 3. Скрипт не запускался
Оказалось, что файл загружен из Интернета и заблокирован. Код проверили, сняли блокировку только с этого файла и не переводили всю систему в Bypass.
🧠 Итог главы
PowerShell удобен для получения структурированных данных и повторяемых действий. Начинай с Get-*, изучай объекты через Get-Member, фильтруй и экспортируй результаты. Перед изменениями используй -WhatIf, минимальные права и понятную область действия.
Windows PowerShell 5.1 и PowerShell 7 могут использоваться параллельно, а Windows Terminal лишь объединяет их в удобном интерфейсе. Не копируй сценарии вслепую: одна строка автоматизации экономит час, но одна неправильная строка способна автоматизировать катастрофу с образцовой скоростью.
✍️ Советы автора
- Проверяй версию через
$PSVersionTable. - Используй
Get-Help ... -Examples. - Применяй
-WhatIfперед массовыми изменениями. - Храни сценарии в Git или хотя бы делай версии файлов.
- Запускай от администратора только команды, которым это нужно.