Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   Скриптовые языки администрирования Windows (http://forum.oszone.net/forumdisplay.php?f=102)
-   -   [решено] Как полюбить PowerShell? (http://forum.oszone.net/showthread.php?t=351766)

lxa85 21-08-2022 21:36 2990867

Как полюбить PowerShell?
 
Здравствуйте.
Как полюбить PowerShell?
Как на нем начать писать так, чтобы не было мучительно больно проклинать его создателей?
Суть в чем? Есть PS, он весь объектно-ориентированный. Он, по идее, должен быть классным. Он должен уметь чего всего.
Вопрос, как понять логику его работы? С каких шагов, инструментов, книг, практик, задач?
Как изменить свое отношение и понять, что то, что делалось на bash одним, достаточно простым и понятным способом сделается так же, но другим?
Буквально вчера мне попалось расширение powershell on steroids которое начало подсказывать возможные ошибки в синтаксисе.
Банально:
Код:

echo Hello World
в Linux дает предсказуемое "Hello World"
в Windows:
"hello
world" (те две строки)
И казалось бы правильная строка выглядит как
Код:

Write-Output -InputObject 'Hello World'
Но подижь так с ходу разберись.
Про вывод длинных строк это тоже отдельная история.

В общем ... как не гореть? Как дойти до его сильных сторон и элегантных решений?

DJ Mogarych 21-08-2022 21:46 2990870

Цитата:

Цитата lxa85
как понять логику его работы? С каких шагов, инструментов, книг, практик, задач? »

Очень хорошо помогает увидеть что-то хорошее и красивое, реализованное на нём.
Как пример возможностей Powershell могу привести вот эту задачу: http://forum.oszone.net/nextoldesttothread-250886.html. Excel-файл, который я приложил, это результат полностью автоматической обработки исходного txt.

У меня очень много всего на работе автоматизировано на Powershell, шлются красивые отчёты по почте с формированием файлов Excel, с графиками и т. д. Пользователь при входе в домен пишет в свою учётку в AD имя машины, время входа, MAC-адрес и т. п., автоматически обрабатывается штатное расписание, выгружаемое из 1С, присылаются отчёты, кто появился-исчез из штатки по сравнению с AD, и так далее. Я считаю, что Powershell - это одна из наикрутейших вещей в Windows.
Есть хорошая книжка - Learn PowerShell in a Month of Lunches, я по ней начинал. Ещё есть Windows PowerShell in Action.
Цитата:

Цитата lxa85
в Windows »

Код:

echo "Hello World"
# или
"Hello World"

Нужно сказать, что в Powershell забиты алиасы из линукса, например, работают команды ls, rm, curl и т. п. Естественно, что ключи у них другие и работают они по-другому, но тем не менее.
Код:

# вывести список псевдонимов
get-alias


lxa85 21-08-2022 23:14 2990877

DJ Mogarych, ни, ну до get-alias то я добрался :)
Даже принял концепцию Действие-Объект
Даже смирился, что строка в ответе тоже объект и его надо соотв. образом выводить.
Знаю, что с до реестра удобно добираться, и чуть-ли не всю систему через него админить можно.
У меня на каком-то ментальном уровне расхождение. Примерно как с С++ =)

Примеры посмотрю, спасибо.

P.S. Побудило же создать тему ps2exe которая не работает в консоли (не смотря не примеры, и возможно это не баг, а фича), работает через gui (win-ps2exe) и в конечном счете задача перевода скрипт в бинарь решилась через ps on steroids.
Но блииин...

Из задачек -- пробовал дернуть через REST запрос (с передачей объекта понятное дело, с заголовком, токеном и пр) неподтвержденный ssl сертификат. Каково же было мое удивление, что необходимые ключи (что-то в р-не ignore ssl) нативно дописали только в последней версии.

Fors1k 21-08-2022 23:53 2990884

Цитата:

Цитата lxa85
Как полюбить PowerShell?
Как на нем начать писать так, чтобы не было мучительно больно проклинать его создателей?
Вопрос, как понять логику его работы? »

lxa85, PowerShell самый простой для понимания язык. Как задача звучит, так ее словами прямо и пишете, например:
Код:

$path = 'C:\Files'
Get-ChildItem $path|Select Name, Length, LastWriteTime

Теперь прочитаем написанное, переводя с английского слова:
Код:

Переменная path = 'C:\Files'
Получи-ДочерниеОбъекты по указанному пути|и выбери мне имя, размер, дату последнего изменения

Всё. Просто поговорили с компьютером как с человеком.

Elven 22-08-2022 08:45 2990893

Для того чтобы слегка вработаться в пошик нужно выучить три команды.
1.
Код:

get-help
например
Код:

get-help get-aduser
выдаст коротенький хелп по get-aduser
Код:

get-help get-aduser -example
покажет несколько примеров, а
Код:

get-help get-aduser -online
тупо откроет подробную статью по командлету на сайте мс.
дальше - у каждого объекта есть набор свойств и методов которые можно дергать, сравнивать, сортировать, фильтровать... короче делать все что угодно из того что можно. и все что можно сделать познается в один пайп и две буквы
2.
Код:

| gm
(Get-Member).
так
Код:

get-childitem
покажет список файлов и папок в текущей директории
а
Код:

get-childitem | gm
покажет что с ними можно сотворить прямо сразу, например так
Код:

(get-childitem).length
- покажет сколько их там всех
а вот так
Код:

(get-childitem -path z:/папка_с_ненужными_файлами).delete()
удалит к лешему.
так что зная get-help и get-member можно уже много чего наворотить. ну а если забыл какую-то команду то есть
3.
Код:

get-command
самым примитивным вариантом использования get-command будет использование куска команды с *, например если захотелось посмотреть что пошик прямо в один командлет может сотворить с компьютером то:
Код:

get-command *computer*

DJ Mogarych 22-08-2022 09:01 2990894

Цитата:

Цитата lxa85
ps2exe »

Модуль: https://github.com/MScholtes/PS2EXE

С GUI: https://github.com/MScholtes/TechNet...ter/PS2EXE-GUI

Vadikan 01-09-2022 11:38 2991500

lxa85, книгу прочесть... Тогда любовь будет крепче. А учиться по форумам и блогам с их ванлайнерами и псевдонимами - потом будешь переучиваться через боль.

YuS_2 02-09-2022 05:33 2991560

Цитата:

Цитата Vadikan
А учиться по форумам и блогам с их ванлайнерами и псевдонимами - потом будешь переучиваться через боль. »

Это вот да! Стопудово, как говорится...

Цитата:

Цитата lxa85
В общем ... как не гореть? Как дойти до его сильных сторон и элегантных решений? »

Как выше подсказали - только читать и при этом, на начальном этапе, не форумы/блоги (их можно потом уже осваивать, после получения начальных принципов и знаний PS), а именно книги...
И учиться исключительно на полных наименованиях командлетов, ни в коем случае не привыкать изначально к алиасам (их уже после освоения можно будет применять, для простоты, когда уже будет ассоциация сразу же формироваться с полным наименованием). Прелесть Powershell (вернее одна из них), как раз, в понятных наименованиях "глагол-существительное"...
Помимо вышеуказанной литературы, могу посоветовать пару русскоязычных или переведенных: "Эффективное программирование в Windows PowerShell" Keith Hill, "Введение в Windows PowerShell" А.Попов.
- книжки немного устаревшие уже, для современных версий PS, но тем не менее, всё равно, актуальные и очень хороши для начального понимания принципов и отличий от...


Время: 23:50.

Время: 23:50.
© OSzone.net 2001-