Глиф Учебники

Урок 9. Командная строка и PowerShell

Курс «Windows» · урок 9 из 10 · 4 минуты чтения

Мышью удобно делать то, что делается редко. Команды выигрывают там, где нужно повторить одно и то же много раз, найти сведения, которых нет в окнах, или помочь кому-то по телефону: «наберите ipconfig и прочитайте строку». В Windows две командные оболочки:

Обе открываются в приложении Терминал (Windows Terminal) — оно умеет держать несколько вкладок с разными оболочками.

Как открыть

Многим командам нужны права администратора. Для этого в меню Win+X выберите пункт с пометкой «администратор» или в результатах поиска — «Запуск от имени администратора». Заголовок такого окна начинается со слова «Администратор».

Слева от курсора — приглашение: папка, в которой вы сейчас находитесь. В cmd оно выглядит как C:\Users\ivan>, в PowerShell — PS C:\Users\ivan>.

Командная строка C:\Users\ivan> C:\Users\ivan — текущая папка Администратор: Windows PowerShell ← права администратора PS C:\Users\ivan> PS — это PowerShell, а не права
Приглашение показывает текущую папку C:\Users\ivan, буквы PS в его начале означают PowerShell, а права администратора видны по слову «Администратор» в заголовке окна.

Основные команды

Что сделатьcmdPowerShell
Показать содержимое папкиdirGet-ChildItem (или dir, ls)
Перейти в папкуcd DocumentsSet-Location Documents (или cd)
На уровень вышеcd ..cd ..
Создать папкуmkdir ПроектыNew-Item -ItemType Directory Проекты (или mkdir)
Копировать файлcopy a.txt b.txtCopy-Item a.txt b.txt
Переместитьmove a.txt D:\Move-Item a.txt D:\
Переименоватьren a.txt c.txtRename-Item a.txt c.txt
Удалить файлdel a.txtRemove-Item a.txt
Показать текстовый файлtype a.txtGet-Content a.txt
Очистить экранclscls
Справка по командеcopy /?Get-Help Copy-Item

Привычные команды dir, cd, cls работают и в PowerShell — это псевдонимы его команд. Но ключи у них другие: dir /s из cmd в PowerShell записывается как dir -Recurse.

Три приёма, которые экономят время:

Путь с пробелами берите в кавычки: cd "C:\Program Files".

Команды удаляют файлы мимо корзины. del /s, rmdir /s, Remove-Item -Recurse удаляют сразу всё в папке и её подпапках, без возможности вернуть. Перед такой командой проверьте папку через dir и путь в приглашении.

Полезные команды

КомандаЧто делает
ipconfigСетевые адреса компьютера
ping адресПроверка связи с узлом
systeminfoСведения о системе: версия, память, дата установки
tasklistСписок запущенных процессов
taskkill /IM notepad.exeЗакрыть программу по имени файла
shutdown /r /t 0Перезагрузить сейчас
shutdown /s /t 0Выключить сейчас
whoamiИмя текущего пользователя
winverОкно с версией Windows

PowerShell: команды и конвейер

Команды PowerShell называются по схеме Глагол-Существительное: Get-Process — получить процессы, Stop-Process — остановить процесс, Get-Service — получить службы. Найти команду по слову помогает Get-Command:

PowerShell
Get-Command *service*

Самое сильное в PowerShell — конвейер: знак | передаёт результат одной команды в следующую. Пять процессов, которые заняли больше всего процессорного времени:

PowerShell
Get-Process | Sort-Object CPU -Descending | Select-Object -First 5 Name, CPU
Get-Process | Sort-Object CPU -Descending | Select-Object -First 5 Name, CPU Get-Process все процессы explorer Id notepad Id powershell Id svchost Id winlogon Id Taskmgr Id Sort-Object по CPU, больше — выше powershell Id explorer Id svchost Id Taskmgr Id notepad Id winlogon Id Select-Object первые 5: Name и CPU powershell explorer svchost Taskmgr notepad
Get-Process передаёт по конвейеру объекты процессов, Sort-Object расставляет их по свойству CPU от большего к меньшему, а Select-Object оставляет первые пять и только свойства Name и CPU.

Sort-Object сортирует по свойству CPU, Select-Object оставляет первые пять строк и нужные столбцы. Отбор по условию делает Where-Object — например, только запущенные службы:

PowerShell
Get-Service | Where-Object Status -eq Running

Свой скрипт

Скрипт — файл с командами, который выполняется целиком. Скрипт PowerShell — файл с расширением .ps1. Создайте папку C:\Scripts, а в ней в «Блокноте» файл largest.ps1 (при сохранении выберите тип «Все файлы», чтобы не получилось largest.ps1.txt). Скрипт покажет пять самых больших файлов в папке «Загрузки»:

PowerShell
$folder = Join-Path $env:USERPROFILE "Downloads"
Get-ChildItem -Path $folder -File -Recurse |
    Sort-Object Length -Descending |
    Select-Object -First 5 Name, @{Name = "MB"; Expression = { [math]::Round($_.Length / 1MB, 1) }}

Запуск — из папки со скриптом, с .\ перед именем:

PowerShell
cd C:\Scripts
.\largest.ps1

На домашних Windows запуск скриптов по умолчанию запрещён, и PowerShell ответит, что выполнение сценариев отключено. Разрешите запуск своих скриптов и скриптов из интернета с цифровой подписью — только для своей учётной записи:

PowerShell
Set-ExecutionPolicy -ExecutionPolicy RemoteSigned -Scope CurrentUser
PS C:\Scripts> largest.ps1 в текущей папке скрипты не ищутся PS C:\Scripts> .\largest.ps1 .\ — путь к текущей папке по умолчанию скрипты запрещены RemoteSigned -Scope CurrentUser свой скрипт largest.ps1 не запустится запустится из интернета, с подписью не запустится запустится из интернета, без подписи не запустится не запустится
Скрипт из текущей папки запускается как .\largest.ps1; по умолчанию не запускается ни один скрипт, а с политикой RemoteSigned — свои и скачанные из интернета с подписью.

Не ставьте политику Unrestricted и не запускайте скрипты из непроверенных источников: скрипт PowerShell может сделать с файлами всё, что может пользователь, а запущенный от имени администратора — всё с системой.

Если в скрипте есть русские буквы, сохраняйте его в кодировке «UTF-8 с BOM». Windows PowerShell 5.1 читает файлы без BOM в старой кодировке, и русский текст превращается в набор непонятных знаков. В примере выше русских букв нет специально.

У cmd тоже есть скрипты — пакетные файлы .bat (в обиходе «батники»). Для новых задач удобнее PowerShell.

PowerShell 7

Кроме встроенного Windows PowerShell 5.1 есть новый PowerShell 7 — бесплатный, с открытым кодом, работает и в Linux, и в macOS. Ставится он отдельно, например через winget, и запускается командой pwsh:

PowerShell
winget install --id Microsoft.PowerShell -e

Для команд из этого курса подходит любой из них.

Коротко

Проверьте себя

1. Как в PowerShell запустить скрипт largest.ps1 из текущей папки?
2. Что делает знак | в PowerShell?
3. Как в заголовке окна понять, что терминал запущен с правами администратора?
4. Почему команда del опаснее удаления в проводнике?