PowerShell оказался на удивление хорош — даже на Mac

I can't believe PowerShell is good

PowerShell оказался на удивление хорош — даже на Mac

Автор, долго обходивший PowerShell стороной, неожиданно для себя открыл его как инструмент автоматизации. В отличие от Bash, здесь есть встроенная поддержка параметров, работа с JSON и объектами, а реестр Windows представлен как виртуальный диск. Скрипты запускаются на Windows, Mac и Linux, а для задач вроде скачивания файлов или преобразования данных PowerShell часто удобнее Node.js и Python.

Я понял это. PowerShell великолепен, даже если вы не используете его в качестве своей оболочки, и даже если вы на Mac или Linux.
  1. d3Xt3r

    Здешний Windows-сисадмин. PowerShell был отличным уже давно, ну, по крайней мере с v5.1, когда наконец исправили многие раздражающие проблемы и ограничения ранних версий. Я практически живу в нём весь день — 90%+ моей рабочей жизни сейчас проходит в PowerShell.

    Но я сомневаюсь в его полезности на других платформах, потому что многое из того, что делает PowerShell крутым на Windows, на самом деле не работает в Linux или macOS.

    Например: Get-Service (и связанные командлеты). Очень удобный командлет, который я использую всё время на Windows. В Linux вы ожидали бы, что он будет работать с юнитами systemd, но нет, этой команды в Linux-версии не существует. То же самое с Get-NetAdapter, или Get-NetTCPConnection, или Get-Disk и многими другими удобными командлетами, которые я постоянно использую на Windows, — все они отсутствуют.

    Однако некоторые командлеты всё же есть, например Get-Process или Get-Uptime и т.д., так что я не понимаю, почему многие из часто используемых Windows-командлетов не были портированы.

    Ещё одна раздражающая особенность — то, как PowerShell на *nix передаёт некоторые встроенные алиасы их нативным версиям. Как на Windows, я всегда использую 'ls', потому что ни у кого нет времени печатать Get-ChildItem. К сожалению, когда я запускаю это в *nix PS, он запускает нативную версию. И это проблема, потому что когда я передаю 'ls' в цикл for или другой командлет для дальнейшей обработки, это, естественно, не работает. Хуже того, это решение «нативное или алиас» даже не согласовано. Например, 'pwd' на самом деле запускает версию PowerShell, тогда как […]

  2. 3eb7988a1663

    Я использовал PowerShell только когда у меня не было других вариантов, но довольно много API ощущаются так, будто их проектировал человек, который никогда не пользовался терминалом. Как будто они скрепя сердце выполняли задачу, ни разу не представив реальный сценарий использования.

    Естественно, я не могу сходу привести пример, но я был bastante разочарован в последний раз, когда мне пришлось к нему прибегнуть, и обнаружил, что несколько «очевидных» рабочих процессов выглядели более костыльными, чем я ожидал бы для дизайна терминального языка с чистого листа.

  3. 16bitvoid

    Лично я предпочитаю nushell[0] вместо PowerShell для подобных задач. Моя основная оболочка по-прежнему Fish, но я иногда использую nushell при интерактивном исследовании структурированных данных (например, JSON-файлов, потому что я всегда забываю синтаксис jq) и для конкретных скриптов nushell (например, поиск всех доступных узлов с GPU на HPC под управлением SLURM, выводимый в виде красивой таблицы), которые, как мне кажется, писать гораздо проще, чем на bash/fish.

    0: https://www.nushell.sh/

  4. majkinetor

    PowerShell настолько хорош, что мне странно, что он не стал по умолчанию хотя бы в некоторых дистрибутивах Linux (или не появился какой-то его полноценный форк/переделка). Я даже использовал его для интеграционных функций в некоторых своих государственных проектах, обслуживающих миллионы пользователей. Тот факт, что у меня есть полноценный язык, созданный для оболочки, очень эффективный, не требующий IDE или чего-либо ещё, — это довольно освобождает.

    Я использую его для всяких вещей. Вот пример, который создаёт коллекцию MusicBrainz из моей локальной папки с аудио, попутно решая proof of work браузера: https://github.com/majkinetor/musicbrainz-userscripts/tree/m...

    Если придираться, производительность могла бы быть лучше, хотя MS многое сделала за предыдущие годы, и даже это только в теории, так как меня это никогда особо не блокировало. Но если бы он ещё и был производительным зверем, я думаю, мы могли бы прекратить исследования новых оболочек и просто использовать его везде.

    Поддержка JSON потрясающая — не нужно учить ничего нового, как с jq, оно просто работает. Выборка данных потрясающая, мне нравится больше, чем SQL. Хеш-таблицы эпичны для конфигурации (у вас там настоящий язык, в отличие от, скажем, YAML).

    Скрипты, которые в bash выглядят ужасно, в pwsh занимают несколько строк прекрасного кода.

    Если вы не пробовали его или не дали ему шанса, вы точно много теряете.

  5. Schlagbohrer

    Недавно я установил PowerShell 7, потому что, видимо, это не то же самое, что powershell, поставляемый с Windows. Это здорово, но теперь у меня в системе как минимум 3 разных PowerShell? Почему? И они работают очень по-разному. Мне пришлось изменить все настройки по умолчанию для открытия нового терминала или нового окна оболочки в Windows, потому что многие значения по умолчанию продолжали выдавать мне один из старых powershell, и я не понимал этого, пока мои команды и скрипты не начинали выдавать ошибки, поскольку они используют команды, которые есть только в PowerShell 7. Не могу поверить, что Microsoft решила скопировать первородный грех Python и создать несколько конфликтующих, сосуществующих установок одного и того же, но разных несовместимых версий. Почемуууууу

    Что касается статьи: Corbin Davenport — потрясающее имя. Статья тоже хороша.

Ещё за этот день

2026-10-22