tariel.ge › Полезное: бесплатные книги › Программирование: от нулей и единиц до PythonБесплатно · автор Тариел Бежанидзе
← Учебник по программированию ЛИСТ 11БЛОК 2 — КОМАНДНАЯ СТРОКАРЕВ. 1
Глава 11 · Командная строка: три системы

PowerShell: объектный подход — почему это не «новый CMD»

Внешне PowerShell легко принять за очередную оболочку с непривычными командами — но внутри у неё принципиально другая архитектура, меняющая саму идею того, что течёт по конвейеру между командами.

Ключевое отличие — объекты вместо текста

В Bash (глава 09) и CMD (глава 10) конвейер | передаёт между командами простой текст — вывод одной команды становится входным текстом для следующей, и эта следующая команда должна сама разобрать (распарсить) этот текст, чтобы извлечь нужные ей данные. PowerShell устроен иначе: по конвейеру передаются настоящие объекты — структуры данных со свойствами и методами, а не просто строки символов.

Почему это принципиально, а не просто "по-другому"

В Bash, чтобы отсортировать файлы по размеру из вывода ls -l, обычно нужны дополнительные инструменты текстовой обработки (например, awk, sort, cut), аккуратно извлекающие нужную колонку из текстового вывода — хрупкое решение, которое ломается, если формат вывода команды хоть немного меняется. В PowerShell аналогичная команда возвращает объекты, у которых размер файла — это уже готовое числовое свойство, а не текст, который ещё предстоит распознать и превратить в число — сортировка или фильтрация происходит напрямую по этому свойству, без хрупкого разбора текста.

Именование команд (cmdlet) — Глагол-Существительное

Команды PowerShell (называемые cmdlet) следуют последовательному шаблону "Глагол-Существительное": Get-Process, Set-Location, Copy-Item, Remove-Item. Это заметно отличается от исторически сложившихся, не всегда очевидных названий команд Unix (ls, grep, awk — сокращения, чей смысл не всегда прозрачен без знания истории) — в PowerShell, зная общий шаблон, легче догадаться о названии нужной команды заранее.

Практический пример работы с объектами

PS> Get-ChildItem # аналог ls / dir — но возвращает объекты, не текст
PS> Get-ChildItem | Sort-Object Length # сортировка файлов напрямую по числовому свойству размера
PS> Get-Process | Where-Object {$_.CPU -gt 100} # процессы, где реальное числовое свойство CPU больше 100

$_ в этих примерах означает "текущий объект, проходящий через конвейер в этот момент" — обращение к его свойству CPU напрямую, без какого-либо текстового разбора, потому что это свойство и так уже есть у объекта в структурированном виде.

Алиасы — мост для тех, кто уже знает другие оболочки

Чтобы не заставлять переучивать всё с нуля, PowerShell включает алиасы (короткие альтернативные имена) для многих привычных команд — как из Unix-мира (ls, cat, cp, rm работают и здесь), так и из старого CMD (dir, copy, del). Технически это всегда вызов настоящего PowerShell cmdlet под привычным именем — то есть даже набрав ls по старой привычке из главы 09, ты на самом деле получаешь объекты PowerShell, а не поведение оригинальной Unix-команды.

Фундамент — .NET

PowerShell построен поверх платформы .NET, что даёт скриптам доступ к огромной библиотеке готовых классов и возможностей — заметно мощнее, чем обычно доступно в скриптах Bash или CMD без установки дополнительных инструментов. Это делает PowerShell пригодным не только для простых операций с файлами, но и для куда более серьёзной автоматизации системного администрирования.

PowerShell больше не только для Windows

Кроссплатформенность, о которой стоит знать

Современный PowerShell (версии 7 и новее, официально открытый исходный код) устанавливается и работает не только на Windows, но и на macOS, и на Linux. Это значит, что тот же Терминал из главы 09 на macOS способен запускать и Zsh/Bash, и (при желании установить) полноценный PowerShell — три оболочки этого блока книги перестали быть жёстко привязаны каждая к своей операционной системе, хотя исторически и по умолчанию распределение именно такое, как показано в главах 09–11.

Сводное сравнение трёх оболочек

КритерийBash/ZshCMDPowerShell
Данные в конвейереТекстТекстОбъекты
РодословнаяUnixMS-DOS.NET, современная разработка
Именование командИсторически сложившеесяИсторически сложившеесяПоследовательный шаблон Глагол-Существительное
КроссплатформенностьUnix-системы (родная), есть портыТолько WindowsWindows, macOS, Linux (версия 7+)

Что дальше

Финальная глава этого блока — не про новую оболочку, а про практический выбор: когда реально стоит использовать каждую из трёх, и как быстро сориентироваться, попав в незнакомую систему.

Глава11 — PowerShell
Блок2 — Командная строка
Далее12 — Сравнение трёх оболочек
СтатусГотово · рев. 1
Предыдущая глава ← 10 · Windows CMD Следующая глава 12 · Сравнение трёх оболочек →

Книга бесплатна для чтения. Автор — Тариел Бежанидзе, компьютерный мастер в Батуми · tariel.ge · все бесплатные книги. Копировать текст целиком на другие сайты — только со ссылкой на источник.