Компания Microsoft уже несколько лет развивает свободную версию командной оболочки PowerShell Core. Она использует открытый код, а её реализация, хоть и в урезанном виде, доступна и на Linux.
Мы рассмотрим особенности PowerShell, основные команды и способ установки. Это поможет определиться тем, кто хочет перейти с Windows на Linux, но при этом продолжить использование PowerShell. Скажем сразу, PowerShell не способна заменить Bash.
Содержание статьи:
Что такое PowerShell?
PowerShell – это разработанная Microsoft оболочка командной строки и по совместительству сценарный язык. В Linux используется версия PowerShell Core с открытым кодом на основе .Net Core. Он имеет много общего с Bash, например, можно сохранять скрипты (в формате .ps1) и выстраивать конвейеры команд.
В Linux PowerShell не столь функционален, как в Windows. Во многом это связано с тем, что оболочка создавалась для администрирования операционной системы от Microsoft. Так что просто перенести скрипты на Linux не получится, в них наверняка есть обращения к реестру, планировщику и прочим программам, относящимся к Windows.
Также к особенностям PowerShell стоит отнести наличие алиасов у команд. Тем самым вы можете даже не заметить, но при использовании оболочки она будет задействовать собственные команды, практически не отличимые от родных команд. К слову, команды Bash также доступны в этой оболочке. Стоит отметить и то, что при удалённой работе через SSH PowerShell не даст использовать sudo.

Установка PowerShell в Linux
Несмотря на то, что PowerShell появился на Linux более пяти лет назад, его не спешат добавлять в репозитории. Он прописался в списках Альт, Arch, CentOS и Slackware. В остальных дистрибутивах лучше воспользоваться snap-пакетом.
Для установки PowerShell используйте команду:
sudo snap install powershell --classic
Вызвать оболочку можно командой:
pwsh
Работа с PowerShell в Linux
Давайте рассмотрим несколько основных команд PowerShell. Они не чувствительны к регистру, поэтому сложные команды запишем с использованием CamelCase.
- $PSVersionTable – узнать версию оболочки;
- get-command – вывести список доступных команд;
- get-alias – вывести список алиасов;
- set-alias -name имя_алиаса -value имя команды – создать алиас;
- remove-item alias:имя_алиаса – удалить алиас в текущей сессии;
- find-module – вывести список доступных модулей;
- install-module имя_модуля – установить модуль;
- get-help имя_команды – получить описание команды, её синтаксис и алиасы;
- get-ChildItem – вывести содержимое папки;
- new-item -ItemType directory -name 'имя_папки' – создать новую папку;
- new-item имя_файла.abc – создать новый файл с расширением abc;
- get_content имя_файла – вывести содержимое файла;
- select_string -path имя_файла -pattern 'текст' – вывести имя файла, номер строки и содержимое строки, содержащее искомый текст.
Например, для того чтобы найти модуль bash выполните:
find-module bash

Теперь рассмотрим get-СhildItem подробнее, с её помощью можно также искать файлы. Вот полезные параметры:
- -path – указать путь;
- -force – включить отображение скрытых файлов;
- -recurse – поиск в подкаталогах;
- -name – вывести только имена файлов;
- -FollowSymLink – следовать по символическим ссылкам;
- -include – имя должно содержать указанный текст. Например, -include ('*error*'+'*.log'), где '' ограничивают запрос, * указывает на позицию текста в имени, + (И) объединяет два условия, также можно использовать , (ИЛИ);
- -exclude – исключает из выдачи файлы, содержащие указанный текст.
Нельзя не отметить то, что PowerShell опирается на объекты. К сожалению, в Linux эту функциональность нельзя задействовать в полной мере, да и перевод строк в объекты -нетривиальная задача, поэтому совмещать команды Bash и PowerShell – не лучшая идея.
Выводы
Теперь вы знаете как пользоваться PowerShell в Linux. В текущем виде едва ли может стать заменой Bash, для этого надо проделать большую работу по переносу команд или их адаптации под особенности и возможности этой оболочки. Пока что использование PowerShell в Linux превращается в комбинирование собственных команд и тех, что есть в системе изначально.
Если же говорить о переносе скриптов из Windows, то корректно заработают лишь единичные образцы, всё же Windows во многих ситуациях обращается к собственным библиотекам и реестру. Также могут быть проблемы с тем, что оболочка использует алиасы и команды, перекрывающие родные команды Linux.
К плюсам PowerShell можно отнести лишь более понятные команды и синтаксис, но всё это перевешивают минусы. При использовании в Linux происходит путаница с командами, логика Bash (работа со строками) плохо сочетается с принципами PowerShell (работа с объектами), подключаемые модули написаны для Windows, да и в целом набор команд не позволит писать полноценные скрипты для Linux.
Нафига козе баян?)))
Единственное для чего может быть полезным - это подключение к удаленной win машине и выполнение на ней PowerShell скриптов.
То-то и оно что нихрена не пашет Enter-PSSession, выдает ошибки по-любому. Проще короче опенссх поставить на сервер вин7
оффтоп маленький.
$ sudo apt update
...
Hit:4 http://packages.microsoft.com/repos/vscode stable InRelease
вот уж не знаю, это страшный сон линуксоида или виндузятника 😀
А какие-нибудь более менее стандартные задачи как в нем сделать? Типа `grep xxx * -r` или `scp file host:path` или `tail -f file`
О госпаде зачем??? В bash есть все что необходимо, а для более продвинутых задач можно юзать встроенный в любые линуксы питон. Зачем нужна эта поделка в линуксе? Кстати как она вообще тут работает, она же основана на .NET который онли виндовс?
Емнип, тут не оригинальный powershell, как в винде, а "Powershell Core", который использует .NET core, который тоже опенсоурсный (dotnet)
PowerShell в Линуск - это хорошая идея, просто вы не понимаете те кто критикует!
Если вы универсальный админ, а не только виндовый или только линуксовый,
то наличие единого интерфейса для выполнения одних и тех-же задач - это круто!
Другой вопрос в том будут ли написанные под винду скрипты работать на линуксе без доработки..
Если нет, тогда баян действительно козе не нужен.
1 скрипт - много платформ - это хорошо. Но если нужно будет под каждую платформу дорабатывать скрипты, то это не айс.
..У меня как раз есть два скрипта на PowerShell - один отправку уведомления на почту, а другой в телеграм. Надо затестить на линухе