Блок 8 · 8

Как пользоваться PowerShell в Windows 11?

Открываем Windows PowerShell и PowerShell 7, работаем с объектами, файлами, процессами, службами, политикой выполнения и WinGet.

Как пользоваться PowerShell в Windows 11?

Обновлено: · DeeNet

🎯 Краткое описание

PowerShell — командная оболочка и язык автоматизации Windows. В отличие от старой CMD, он передаёт между командами не только текст, а полноценные объекты со свойствами: процессы, службы, файлы, сетевые адаптеры и многое другое.

Звучит серьёзно, но начинать можно с простых команд. PowerShell не требует сразу писать сценарий на триста строк и называть его финал_точно_рабочий_v7.ps1. Сначала научимся смотреть данные, фильтровать их и безопасно выполнять небольшие действия.

🧩 Когда это пригодится

🔍 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

  1. Нажми Win + X.
  2. Выбери Терминал или Терминал (Администратор).
  3. Проверь название профиля во вкладке.

Через поиск введи 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 лишь объединяет их в удобном интерфейсе. Не копируй сценарии вслепую: одна строка автоматизации экономит час, но одна неправильная строка способна автоматизировать катастрофу с образцовой скоростью.

✍️ Советы автора

🔗 Полезные ссылки