LINUX.ORG.RU

Состоялся релиз PowerShell 7

 ,


0

0

4 марта вышла в свет новая версия PowerShell 7.

PowerShell представляет собой «кроссплатформенный фреймворк автоматизации ПО и конфигурирования, оптимизированный для структурированных данных, REST API и объектных моделей», который включает в себя командную оболочку, объекто-ориентированный язык и набор средств для исполнения сценариев и управляющих модулей.

Из новых возможностей отмечены:

  • Параллельная обработка объектов в ForEach-Object
  • Новые операторы: тернарный условный оператор ?:; управляющие операторы || и &&, аналогичные таким же операторам в bash; условные NULL-операторы ?? и ?=, отдающие значение справа в случае, если значение слева равно NULL
  • Улучшенное представление описания ошибок и командлет Get-Error для вызова детального описания ошибок
  • Вызов ресурсов службы настройки требуемого состояния (DSC) непосредственно из PowerShell (в экспериментальной стадии)
  • Улучшенная обратная совместимость с Windows PowerShell

Версия доступна к использованию дистрибутивами Linux, поддерживающими .NET Core 3.1, сообществом предоставлены пакеты для Arch и Kali Linux.

Snap-пакет в Ubuntu 16.04 вызывает ошибку сегментирования, в связи с чем предлагается установка в поставке DEB или tar.gz.

>>> Подробности

★★★

Проверено: cetjs2 ()

PowerShell представляет собой

способ понастольгировать о временах Pentium I, когда даже запуска оболочки нужно было ждать несколько секунд. (Хотя не уверен, что тогда всё было так плохо. Кажется, что запускалось быстрее.)

PowerShell 7
Power
7
Новые операторы: [..], управляющие операторы || и &&,

Всё, что нужно знать об этом поделии и такой манере нумеровать версии в принципе.

xaizek ★★★★★
()
Ответ на: комментарий от xaizek

Кажется, что запускалось быстрее.)

PowerShell Core, это не Windows PowerShell. Разница в производительности заметна. Стартует, как bash.

anonymous
()
Ответ на: комментарий от anonymous

Судя по wiki, теперь есть лишь PowerShell. Сомневаюсь, что скорость запуска как у bash. Всё же натив против VM (даже если есть кеширование машинного кода, оно может что-то вытащить, но не всё).

xaizek ★★★★★
()
Ответ на: комментарий от xaizek

Откуда такая ненависть?

Ладно админы, профдеформированные башем/перлом. Но программисту как бы очевидно, что сабж - первый шелл с вменяемым ЯП. Читаемо, логично, структурированно.

Один минус - нет такой глубокой интеграции в ОС, как в винде, т. к. нет COM.

ждать несколько секунд

Какая-то линукс-магия? На win10 запускается моментально.

anonymous
()
Ответ на: комментарий от anonymous

Какая-то линукс-магия? На win10 запускается моментально.

скорее всего snap магия. Там программы весьа долго запускаются в первый раз.

Этак GNOME Calculator секунд 6 на топовом ПК с SSD.

anonymous
()
Ответ на: комментарий от anonymous

Читаемо, логично, структурированно.

Только для тех, у кого ООП головного мозга (к нормальному ООП я никаких претензий не имею, к слову). Они и на баше простую задачу, которая делается за 10 простых и логичных строк, раздувают до 100500 функций и по очереди их дёргают. Теперь для них придумали целый шелл, где можно писать длинные-длинные конструкции, повышая ЧСВ :)

Deleted
()
Ответ на: комментарий от anonymous

скорее всего snap магия. Там программы весьа долго запускаются в первый раз.

Потому что он их через /dev/loop* запускает.

kostyarin_ ★★
()
Ответ на: комментарий от Deleted

Видеть везде ООП - вот где ООП головного мозга.

Вас PS заставляет писать с наследованием или полиморфизмом? Или там с метаобъектным протоколом, если вы любитель CLOS?

Или вы запись Foo.Bar считаете объектно-ориентированной, а башево foobar - нет?

Что многословнее - конечно, ведь не было задачи сделать write-only. С длинными POSIX-ключами сравнимо будет.

А еще самые продвинутые умеют писать функции, если имеющиеся примитивы слишком примитивны.

anonymous
()
Ответ на: комментарий от Deleted

Они и на баше простую задачу, которая делается за 10 простых и логичных строк, раздувают до 100500 функций и по очереди их дёргают

видел я таких админов. их близнецами-десятистрочниками были равномерно загажены все хосты, при том что отличия в скриптах были минимальны. выносил параметры в конфиг, в результате число скриптов снизилось на несколько порядков, добавлял вменяемое логирование. Но да, размер вырос за счёт универсальности. Думаю, нам друг друга не понять

router ★★★★★
()
Ответ на: комментарий от anonymous

Какая-то линукс-магия? На win10 запускается моментально.

Под линукс тоже запускается мгновенно. Это старые штампы, тех времен, когда PowerShell действительно тормозил, до 4-ой версии наверно.

anonymous
()
Ответ на: комментарий от anonymous

Не ненависть, а скорее презрение. Запускал эту штуку на винде, когда надо было. Что авто-дополнение, что вывод ошибок, что система команд были каким-то ужасом. Может сейчас аппаратная часть ускорилась и оно чуть меньше тормозит (или добавили ещё какой-нибудь демон для «оптимизации» (сокрытия тормозов)).

xaizek ★★★★★
()
Ответ на: комментарий от xaizek

Использую сабж совсем по чуть-чуть на винде, тормозов не встречаю. Точнее, действительно видел когда-то давно, видимо оптимизировали с тех пор.

Про вывод ошибок соглашусь, не понравился. Хотя задумка под капотом неплохая, исключения или что-то вроде. Но сериализуются на вид отвратно.

А в целом, как язык в вакууме он может и не очень, а по сравнению с другими шеллами - отлично. Баш - вот что каюк для структурированного программирования, я на нем успел поскриптовать вволю. Хотя для наколенного ad-hoc баш, пожалуй, лучше.

anonymous
()
Ответ на: комментарий от router

их близнецами-десятистрочниками были равномерно загажены все хосты, при том что отличия в скриптах были минимальны.

Ну это тоже глупо и сложно поддерживаемо.

Думаю, нам друг друга не понять

Если теорему Эскобара не применять, то всё отлично понимается :)

Deleted
()
Ответ на: комментарий от anonymous

Про вывод ошибок соглашусь, не понравился.

Есть служебная переменная $ErrorActionPreference, с помощью которой можно в $profile настроить вывод ошибок и автоматическая $Error, с помощью которой можно просмотреть всю информацию об ошибке.

 >>> 2/0                                                                                                                                              
RuntimeException: Attempted to divide by zero.

 >>> ($error[0] | gm).name          
Equals
GetHashCode
GetObjectData
GetType
ToString
CategoryInfo
ErrorDetails
Exception
FullyQualifiedErrorId
InvocationInfo
PipelineIterationInfo
ScriptStackTrace
TargetObject
PSMessageDetails

 >>> $error[0].tostring()  
Attempted to divide by zero.

 >>>
anonymous
()
Ответ на: комментарий от anonymous

Но программисту как бы очевидно, что сабж - первый шелл с вменяемым ЯП.

А это вообще не шелл. Управление процессами убогое, работа с потока ввода и вывода убогая. Подразумевается работа с функциями на дотнете или самом же пауэршелле, а не glue language для объединения результатов работы сторонних программ, написанных на разных языках. Обычный скриптовый ООП-язычок, в котором некоторые конструкции зачем-то сделали похожими на шелл - по-видимому, чтобы обмануть неопытных сисадминов - типа это же шелл, тут не надо программировать

annulen ★★★★★
()
Ответ на: комментарий от annulen

А это вообще не шелл. Управление процессами убогое, работа с потока ввода и вывода убогая. Подразумевается работа с функциями на дотнете или самом же пауэршелле, а не glue language для объединения результатов работы сторонних программ, написанных на разных языках. Обычный скриптовый ООП-язычок, в котором некоторые конструкции зачем-то сделали похожими на шелл - по-видимому, чтобы обмануть неопытных сисадминов - типа это же шелл, тут не надо программировать

Я тоже сначала похожим образом думал, но написав пару тройку скриптов в т.ч. уже под линукс, получил другой опыт, который изменил моё мнение. Набор классов чего только стоит, там и строки и структуры и вообще весь дотнет кор. Можно создавать свои классы через код-ДОМ, можно в рефлексию..

anonymous
()
Ответ на: комментарий от anonymous

Вангую, что ты до этого использовал шелл не по назначению, и уж точно не прочитал мой омментарий полностью

annulen ★★★★★
()
Ответ на: комментарий от annulen

Управление процессами убогое, работа с потока ввода и вывода убогая.

Это ты убогий.

anonymous
()
Ответ на: комментарий от annulen

Вангую, что ты до этого использовал шелл не по назначению, и уж точно не прочитал мой омментарий полностью

Прочитал. Полностью. Возможно мы друг-друга не сможем понять. Но я о средстве автоматизации а не о шелле. Хотя pwsh таки можно и как шелл но это слишком. И да перл медленный даже по сравнению с сабжем, можно проверить на одинаковых конструкциях с 2-мя вложенными циклами с математикой. То-же касается остального.

anonymous
()
Ответ на: комментарий от anonymous

но это слишком

Нормально. Только в нем что-то переименовываю/перемещаю/копирую – удобно, когда необходимы для этого некие условия. Опять же, как калькулятор, да и «родные» утилиты никто не отменял. Тут пишут, что pwsh многословен, но если его использовать, как шелл, то это не так, да и настраивается все в профиле (аналог .bashrc), псевдонимы, функции, классы.

anonymous
()
Ответ на: комментарий от anonymous

Возможно мы друг-друга не сможем понять. Но я о средстве автоматизации а не о шелле. Хотя pwsh таки можно и как шелл но это слишком.

Наверное, мы автоматизируем разные вещи.

annulen ★★★★★
()
Ответ на: комментарий от anonymous

Это ты убогий.

Не ты. Как еще можно называть «шелловый» язык, в котором, чтобы просто выполнять процессы в синхронном режиме и не терять их логи, приходится городить вот такое: https://github.com/qt/qt5/blob/dev/coin/provisioning/common/windows/helpers.ps1#L19-L68

А все потому, что эта срань запускает синхронно только приложения собранные с /SUBSYSTEM:CONSOLE, а те которые /SUBSYSTEM:WINDOWS запускаются в фоне и хрен два ты получишь их лог без записи во временный файл. Охрененный шелл, дайте два.

Еще веселуха со всякими Write-*, когда Write-Host в лог печатает, а Write-Error остается «в гуях»

annulen ★★★★★
()
Последнее исправление: annulen (всего исправлений: 1)
Ответ на: комментарий от anonymous

Там весь «костыль» в одном ключе одного командлета стартующего процесс

Эм.. что? В баше ты пишешь:

progam1 arg1 arg2 arg3

Оно выполняется, пишет в лог родителя, а следующая команда выполняется, только когда program1 завершится. И не надо никакие портянки писать на 50 строк.

annulen ★★★★★
()
Ответ на: комментарий от annulen

Ок. Get-Help -Full Start-Process.. хотя после баша и вообще традиционной сосноли под тот ещё изврат, да. Но я быстро привык и все пишу почти в функциональной парадигме. В общем есть и хорошее ))

anonymous
()
Ответ на: комментарий от anonymous

Ты серьезно думаешь, что я его не читал? Этот код правило и ревьюило несколько человек, все из них умеют пользоваться гуглом и читать хелп, включая даже меня

annulen ★★★★★
()
Ответ на: комментарий от anonymous

Не мое,просто оставлю тут:

Чтобы создать новый пустой файл используйте команду:

new-item losst.txt

Или:

"">losst.txt

new-item? Серьёзно? Затем добавим в этот файл содержимое:

set-content losst.txt -value «Linux Open Source Software Technologies»

конечно это в разы удобней чем, например

echo «fdsfs» » file

Создайте новый каталог и перейдите в него:

mkdir losst-files

cd losst-files

ну вот, а как же new-directory, например?

Затем создадим один файл в этой папке и посмотрим ее содержимое:

new-item losst.txt

ls

Если вы хотите получить полный список файлов в папке с подробной информацией используйте команду dir:

dir

То есть для файлов мы спиздили ls, но не могли не ввести свою поебень из винды и для подробной информации будем использовать dir (а почему не get-directory??)

Работа с процессами в PowerShell Чтобы посмотреть список запущенных процессов используйте команду get-process:

get-process

Ну спасибо, я лучше ps

Да идите вы в жопу со своими повершеллами на линуксах ©

anonymous
()
Ответ на: комментарий от anonymous

конечно не твоё. ни ты не тот дятел не пытался понять почему сделано именно так. хотя и кривовато сделал МС, да. Такие же претензии можно в адрес юниха накидать.

new-item -itemtype …

Где варианты: [code] File Directory SymbolicLink Junction HardLink Certificate Provider Certificate Store StoreLocation [/code]

Что там в юнихах для создания файла? touch? А для директории? mkdir? А для линков? ln?

Серьезно? Для системы где всё есть файл совершенно разные команды?

Про работу с сертификатами не говорим, совершенно другая команда.

Про ls и dir совсем верх идиотизма. Они алиасы на get-childitem. Собственно как get-process и ps.

anonymous
()
Ответ на: комментарий от anonymous

Всё правильно. Bash в винде норм. Powershell в линуксах нет.

gnu_linux
()
Ответ на: комментарий от anonymous

Можно написать свой класс чтоб не городить такие костыли но да после простоты баша тут ту мАч

anonymous
()
Ответ на: комментарий от anonymous

Этак GNOME Calculator секунд 6 на топовом ПК с SSD.

Тру-гномоводы калькулятор в виде отдельного девайса под рукой держат? Прогрессивно.

Grzegorz

anonymous
()
Ответ на: комментарий от anonymous

new-item? Серьёзно? Затем добавим в этот файл содержимое

Странные у тебя познания в pwsh

PS> ni 1.txt
PS> 111 > 1.txt
PS> 222 >> 1.txt
PS> gc 1.txt
111
222
PS>

И да, в сабже нет псевдонима ls, чтобы не конфликтовал c /bin/ls. Не путай PowerShell Core и Windows PowerShell, это не одно и тоже, хотя они и совместимы.

Ну спасибо, я лучше ps

gps тоже неплохо, в винде кстати псевдоним (alias) ps

anonymous
()
Ответ на: комментарий от anonymous

Это не проблема, это фича

anonymous
()
Ответ на: комментарий от annulen

https://github.com/qt/qt5/blob/dev/coin/provisioning/common/windows/helpers.p...

Отличная портянка. Очень понятный код. Без сарказма.

А за одно это

Param (
        [string]$File=$(throw("You must specify a filename to get the checksum of.")),
        [string]$Expected=$(throw("Checksum required")),
        [ValidateSet("sha256","sha1","md5")][string]$Algorithm="sha1"
    )
В ножки кланяться MSовцам.

А тепрь смотрим швятой баш

# This is correct
getopt "hv:t::" "-v 123 -t123"  
getopt "hv:t::" "-v123 -t123"  # -v and 123 doesn't have whitespace

Here h,v,t are the options and -h -v -t is how options should be given in command-line.

'h' is a no-value option.
'v:' implies that option -v has value and is a mandatory option. ':' means has a value.
't::' implies that option -t has value but is optional. '::' means optional.

Сукпздц. И только попробуй мне сказать что что это «лучше» или «проще» или «понятней».

anonymous
()
Ответ на: комментарий от anonymous

И то и то какой-то ад, но при этом getopt - старый unix-овый стандарт и всем известен

Не должно быть никаких, блин, DSL-ей таких. JSON и ни ипёт

В этом вся поверщель - она может и даёт что-то там сделать, но это очередной NIH от мелкомягких, так что нафиг

vitalif ★★★★★
()
Последнее исправление: vitalif (всего исправлений: 1)
Ответ на: комментарий от vitalif

Где ты там ужос увидел? Абсолютно читаемый и понятный код. Это вам не Rust. Впрочем… это же лорчане деформированные идеологией … У кого я спрашиваю.

anonymous
()
Ответ на: комментарий от vitalif

плюсану

ну вообще - кому ты что доказываешь? гнуснопрославленному анонизмусу, любителю венгерской нотации? потому что её «использование придаёт программам такой вид, будто они написаны на венгерском языке». БГГ

mumpster ★★★★★
()
Ответ на: комментарий от anonymous

Наберут по объявлению (С)
А потом пытаются *х в винду превратить.
Не понятно - нахрена костыли из оффтопика тащить?
Хотя понятно, не можешь победить - возглавь, а потом развали все …

anonymous
()
Ответ на: + от qbbr

В дистрибутивах Linux нужно удалять все, что от Билла /карантин/.

anonymous
()
Ответ на: комментарий от anonymous

...не пытался понять почему сделано именно так. хотя и кривовато сделал МС, да.

Да мне в общем-то насрать, почему так оффтопик сделал.

anonymous
()
Ответ на: комментарий от anonymous

Ну я так и думал что по вопросу твоего дятлизма и оригинального автора сообщения разногласий не будет.

anonymous
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.