Внешне PowerShell легко принять за очередную оболочку с непривычными командами — но внутри у неё принципиально другая архитектура, меняющая саму идею того, что течёт по конвейеру между командами.
В Bash (глава 09) и CMD (глава 10) конвейер | передаёт между командами
простой текст — вывод одной команды становится входным текстом для
следующей, и эта следующая команда должна сама разобрать (распарсить) этот текст, чтобы
извлечь нужные ей данные. PowerShell устроен иначе: по конвейеру передаются
настоящие объекты — структуры данных со свойствами и методами, а не
просто строки символов.
В Bash, чтобы отсортировать файлы по размеру из вывода ls -l, обычно нужны
дополнительные инструменты текстовой обработки (например, awk, sort,
cut), аккуратно извлекающие нужную колонку из текстового вывода — хрупкое
решение, которое ломается, если формат вывода команды хоть немного меняется. В
PowerShell аналогичная команда возвращает объекты, у которых размер файла — это уже
готовое числовое свойство, а не текст, который ещё предстоит распознать и превратить в
число — сортировка или фильтрация происходит напрямую по этому свойству, без хрупкого
разбора текста.
Команды PowerShell (называемые cmdlet) следуют последовательному шаблону
"Глагол-Существительное": Get-Process, Set-Location,
Copy-Item, Remove-Item. Это заметно отличается от исторически
сложившихся, не всегда очевидных названий команд Unix (ls, grep,
awk — сокращения, чей смысл не всегда прозрачен без знания истории) — в
PowerShell, зная общий шаблон, легче догадаться о названии нужной команды заранее.
$_ в этих примерах означает "текущий объект, проходящий через конвейер в этот
момент" — обращение к его свойству CPU напрямую, без какого-либо текстового разбора,
потому что это свойство и так уже есть у объекта в структурированном виде.
Чтобы не заставлять переучивать всё с нуля, PowerShell включает алиасы (короткие
альтернативные имена) для многих привычных команд — как из Unix-мира (ls,
cat, cp, rm работают и здесь), так и из старого CMD
(dir, copy, del). Технически это всегда вызов
настоящего PowerShell cmdlet под привычным именем — то есть даже набрав ls по
старой привычке из главы 09, ты на самом деле получаешь объекты PowerShell, а не
поведение оригинальной Unix-команды.
PowerShell построен поверх платформы .NET, что даёт скриптам доступ к огромной библиотеке готовых классов и возможностей — заметно мощнее, чем обычно доступно в скриптах Bash или CMD без установки дополнительных инструментов. Это делает PowerShell пригодным не только для простых операций с файлами, но и для куда более серьёзной автоматизации системного администрирования.
Современный PowerShell (версии 7 и новее, официально открытый исходный код) устанавливается и работает не только на Windows, но и на macOS, и на Linux. Это значит, что тот же Терминал из главы 09 на macOS способен запускать и Zsh/Bash, и (при желании установить) полноценный PowerShell — три оболочки этого блока книги перестали быть жёстко привязаны каждая к своей операционной системе, хотя исторически и по умолчанию распределение именно такое, как показано в главах 09–11.
| Критерий | Bash/Zsh | CMD | PowerShell |
|---|---|---|---|
| Данные в конвейере | Текст | Текст | Объекты |
| Родословная | Unix | MS-DOS | .NET, современная разработка |
| Именование команд | Исторически сложившееся | Исторически сложившееся | Последовательный шаблон Глагол-Существительное |
| Кроссплатформенность | Unix-системы (родная), есть порты | Только Windows | Windows, macOS, Linux (версия 7+) |
Финальная глава этого блока — не про новую оболочку, а про практический выбор: когда реально стоит использовать каждую из трёх, и как быстро сориентироваться, попав в незнакомую систему.
Книга бесплатна для чтения. Автор — Тариел Бежанидзе, компьютерный мастер в Батуми · tariel.ge · все бесплатные книги. Копировать текст целиком на другие сайты — только со ссылкой на источник.