LINUX.ORG.RU
ФорумAdmin

Кто-нибудь использует pwsh в повседневной рутине?

 


0

2

Про себя скажу, что это основной консольный инструмент. Пробовал perl так как он ближе всего по начальному синтаксису, но не то… Понятное дело, что pwsh не готово заменить bash, даже sudo ориентируется на bash. Возможно это завист от глобальных настроек в /etc/shells, где я не рискнул выставить /usr/bin/pwsh, как шелл по умолчанию. Но как же он удобен… Именно как шелл, скрипты только дополняют картину. Но в тоже время, при всех плюсах всегда необходимо держать в голове, что это чужеродная база, много всяких нюансов, не все консольные утилиты и программы адекватно возвращают результат.

★★★★
Ответ на: комментарий от cocucka
cp -r from-dir to-dir

-----

Copy-Item -Path "C:\Logfiles\*" -Destination "C:\Drawings" -Recurse

Copy a file to a remote computer

scp from-file remotecomp:to-file

---------

$Session = New-PSSession -ComputerName "Server01" -Credential "Contoso\User01"
Copy-Item "D:\Folder001\test.log" -Destination "C:\Folder001_Copy\" -ToSession $Session

futurama ★★★★★
()
Последнее исправление: futurama (всего исправлений: 1)

Как тут уже написали, синтаксис PowerShell чрезвычайно многословный. Плюс, при наборе постоянно требуется зажимать Shift, т.к. многие ключевые слова начинаются с большой буквы. Плюс требуется нажимать кучу спец. символов, которые неудобно набирать.

Как это может быть удобно в повседневной жизни????

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

Чем удобен, почему лучше чем bash/zsh.

Не знаю zsh, автодополнение, управляемая история, смена промпта, широкая кастомизация, инлайн-функции, доступ к псевдонимам и функциям прямо из командной строки. Но это все нужно смотреть по реализации, иначе перечисленные пункты не имеют значения. Преимущества и недостатки выявляются только в процессе использования. Для этого собственно и тема. Есть много нюансов, где-то вижу а-ля This feature is not supported on this platform, приходится решать задачи традиоционными методами. Но в этом и есть интерес, я бы даже сказал, что это способствует, парадокс, лучшему пониманию лунукс. Когда не можешь достичь нужного результата, ты начинаешь искать обходные пути, и находишь иногда совершенно неожиданные варианты. Как пример, не работал внутрений кмдлет Test-Connection, это а-ля /usr/bim/ping, перерыл кучу всего, пока не узнал про setcap. А ведь 20 лет не знал, просто не сталкивался.

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

Можешь дать пример команды на PS, которая выведет все файлы больше 100Мб в текущей директории и её поддиректориях, отсортировав результат по убыванию, в формате fileName:size, пути должны быть абсолютные?

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

Это еще неизвестно где такие большин файлы. 100mb, из видосов

dir ./Videos/ -r | ? Size -gt 100mb | % { '{0}:{1}' -f $_.Name, $_.Size }

Абсолютные, т.е. полные? $_.FullName тогда.

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

Я это в формате флейма и флуда, я знал про это «порт» но не вижу в нем никакого смысла. По делу сказать мне нечего. Сам сижу на fish как шеле но не пишу скрипты на нем ибо для этого есть скриптота типо питона (если сложный) и баш (если простая хрень).

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

я знал про это «порт» но не вижу в нем никакого смысла

Ну это как бы не порт, а официальный pwsh (не powershell). Он под винду, макось и различные вариации линукс с учетом платформы. Открытый код. Дистрибьюция в виде пакетов под убунту, редхэт, альпайн и в виде тар-архивов.

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

Top-level statements

Это когда отметается синтаксическая шелуха? У меня dotnet не установлен, т.к. не программист и для меня очень сложно что-то написать связанное с параллельным кодом. Runspaces & Events для меня, как стена. А все остальное, разовые задачи, последнее время пишу прямо в консоли, главное случайно ESC не нажать, тогда все потеряется.

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

В моей жизни pwsh делает задачи не характерные для линукса, поэтому они для сравнения годятся плохо.

Посмотрел ЛОР по тегу «bash», нашёл вот этого беднягу: bash скрипт цикл с условием

Его вариант:

#!/bin/bash

# определяем самую раннюю дату в файле myfile
EARLIEST_DATE=`cat /root/myfile |awk '{print $1}' |sort |head -n 5 |tail -n 1`

# отфильтровываем все строки с этой самой ранней датой из файла myfile и выбираем только столбец с размером 
FILTER_STRINGS=`cat /root/myfile |grep $EARLIEST_DATE |awk '{print $3}' > $TMP_SIZE`

# суммируем размер за нашу дату
SUMMARY_SIZE=`cat $TMP_SIZE| awk '{s += $1} END {print s}'`

# проверяем, больше требуемого размера наш суммарный размер по столбцу Размер или нет 
if [[ $SUMMARY_SIZE -gt 10000 ]]; then
echo "Размер больше 10000"
  else 

Мой вариант:

$limit = 10000

$content = Get-Content tmp\myfile | ConvertFrom-CSV -Delimiter " " | sort Date

$sum = $content | where {$_.Date -like $content.date[0]} `
    | Measure-Object -Sum -Property Value | select -ExpandProperty Sum

if ($sum -gt $limit) {
    echo "Размер больше $limit"
} else {
    ...
}

Плюсы разной степени очевидности:

  • Код читаемый даже с базовыми знаниями английского. Недоумение может вызвать разве что select -ExpandProperty.
  • Меньше пайпов, переменных и обращений к ФС.
  • Не надо знать самобытный синтаксис подкоманд или оператора сравнения (в pwsh всегда (...)).
  • Конструкция Get-Something ... | where {$_.Property -op ...} | select Prop1,Prop2 с минимальными изменениями годится для 90% pwsh-скриптов.
  • При изменении входных условий скрипт требует минимальных доработок. Что делать в bash при смене формата дат?
muon ★★★★
()
Последнее исправление: muon (всего исправлений: 1)
Ответ на: комментарий от muon

Да, читаемость в разы выше, чем баш портянка. Ещё мне импонирует, что в pwsh скрипте всё сделано на внутренних функциях, а не сторонних утилитах. А баш скрипт может подкинуть сюрприз, если скажем в системе вместо core-utils, стоят bsd-utils.

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

sort Date

В линукс версии pwsh нет псевдонимов sort, ls, echo и cat. Наверное посчитали, что они могут конфликтовать с нативными утилитами. Хотя приоритет выполнения ставит исполняемые файлы только на четвертое место, поэтому эти псевдонимы можно смело возвращать.

alias > function > cmdlet > executable > *.ps1
 $ get-command sort* | get-unique                                                                             

CommandType     Name                     Version    Source
-----------     ----                     -------    ------
Alias           sort -> Sort-Object
Cmdlet          Sort-Object              7.0.0.0    Microsoft.PowerShell.Utility
Application     sort                     0.0.0.0    /usr/bin/sort
dmitry237 ★★★★
() автор топика
Последнее исправление: dmitry237 (всего исправлений: 1)
Ответ на: комментарий от dmitry237

Я выше бросал ссылку на nushell, в котором это должно выглядеть приблизительно так же, при этом без MS канцелярита, от которого у меня глаз дергается.

И по-моему, существует ещё пара оболочек а-ля nushell, оперирующих структурированной информацией.

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

Я выше бросал ссылку на nushell

Я посмотрел, спасибо.

в котором это должно выглядеть приблизительно так же, при этом без MS канцелярита

Меня вполне устраивает синтаксис. Обычно размашистый код применяется в скриптах, а для шелла лучше использовать сокращенный. Например:

Get-Command sort* | Get-Unique
gcm sort* | gu

Отображение выводимой информации так же настраивается, как в format-файлах, так и с помощью селективного выбора необходимого. Например:

 $ get-date | fl *                         

DisplayHint : DateTime
DateTime    : среда, 18 января 2023 г. 15:14:49
Date        : 18.01.2023 00:00:00
Day         : 18
DayOfWeek   : Wednesday
DayOfYear   : 18
Hour        : 15
Kind        : Local
Millisecond : 93
Microsecond : 247
Nanosecond  : 400
Minute      : 14
Month       : 1
Second      : 49
Ticks       : 638096516890932474
TimeOfDay   : 15:14:49.0932474
Year        : 2023

 $ get-date | ft hour, minute

Hour Minute
---- ------
  15     17
 $ get-date -f 'HH:mm'
15:18
$ get-date -uf '%R'
15:18
dmitry237 ★★★★
() автор топика
Ответ на: комментарий от urxvt

Перл то не умер, он, просто, переродился.

Местами похож внешне, особенно автоматическая переменная $_. Наверное 20 лет назад перл стал отправной точкой при разработке синтаксиса.

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

В линукс версии pwsh нет псевдонимов sort, ls, echo и cat. Наверное посчитали, что они могут конфликтовать с нативными утилитами

пару лет назад был большой срач по этому поводу, вроде поднятый разрабом curl.

А вообще забавно, что у меня мощная щель под линуксом запускается мгновенно, а под виндой - несколько секунд (под линуксом на пробу ставил, вообще я fish пользуюсь).

Самое удобное, что я видел в щели - там можно не просто запускать команды в бэкграунде, но еще и получать их список и выборочно прибивать. Гораздо удобнее чем systemd-run например.

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

постоянно требуется зажимать Shift, т.к. многие ключевые слова начинаются с большой буквы

Можно пример, когда в pwsh требуется использовать большую букву?

muon ★★★★
()

Это просто скандал, в православном храме богохульства и содомский заговор!

Не нужен повершелл иначе как для удалённой работы с заблудшими серверами.

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

А как оно тормозит приработе с wmi.

WMI по всей видимости скоро останется только для обратной совмести, сейчас мгновенный CIM. В pwsh уже выпилили поддержку WMI, но она еще жива в powershell, который застыл на версии 5.1.

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

Не повершелл же учить.

Мне норм. Основной инструмент. История (без дубликатов): bash за два года, pwsh за ноябрь-январь:

$ (gc (Get-PSReadlineOption).HistorySavePath | gu).Count
8444

$ (gc .bash_history | gu).Count                         
655
dmitry237 ★★★★
() автор топика
Ответ на: комментарий от t184256

Из тех команд, которые я пишу в xonsh, >95% выполнит и bash

pwsh тоже почти совместима с bash. Не выполнятся только builtin, так как pwsh о них ничего не знает и встречается некорректная работа некоторых приложений.

Например clifm, он работает, но при выходе крешится вместе с терминалом. Так же встречал некорректный ответ запроса curl, сервер возвращает ошибку. При этом iwr (Invoke-WebRequest) отрабатывает правильно, как и curl под bash.

В основном нативные утилиты работают, как в bash, параметры и аргументы воспринимают без ошибок, возвращают exit-код.

Т.е. я использую синтаксис pwsh для решения типовых задач. Даже exec (Switch-Process) починили и стали доступны сценарии с замещением шелла.

dmitry237 ★★★★
() автор топика