anonymous@RULINUX.NET~# | Last login: 2024-08-21 19:51:14 |
Регистрация Вход | Новости | Разметка | Пользователи | Галерея | Форум | Статьи | Неподтвержденное | Трекер | Правила форума | F.A.Q. | Ссылки | Поиск |
Форум - Talks | [RSS] |
Ура! Мы ждали этого события 10 лет. PowerShell от Microsoft стал opensource-проектом на GitHub под лицензией MIT, его теперь можно установить на Ubuntu 16.04 и другие линуксы. Это событие также осветилось в студийных СМИ и на msdn.
Почему PoserShell нас так волнует?
But what can you do with it? Well, you might remember that whole .NET Framework thing - basically Microsoft's modern windows API. Turns out, you can do *literally* anything the framework can, with a little effort. That' fine and dandy, but what can you do easily and well?
Almost everything. See, between .NET and WMI and few other things, Microsoft has abstracted out the entire operating system into objects we can work with, and written PS stuff that manages it.
So pretty much every Microsoft product can me talked to / managed from / poked with via Powershell. And so can most things on top of it by major vendors. VMWare (which has Python options too of course) for example.
I wanted to hate PowerShell. I did at first, and then I didn't. But, now I do again. Want to know why?
I hate PowerShell, because it's not available for Linux, and I've realized part of why it can't be available for Linux. PowerShell exposed me to how "unified" Windows is (or can be made to seem), and how heterogenous Linux is.
AMUR-WOLF(*) (2016-08-27 16:49:56)
Отредактировано AMUR-WOLF по причине "не указана"
Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:48.0) Gecko/20100101 Firefox/48.0
|
|
|
![]() |
AMUR-WOLF(*)(2016-08-27 19:06:38)
Отредактировано AMUR-WOLF по причине "не указана" Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:48.0) Gecko/20100101 Firefox/48.0 |
![]() |
Скрыть
Re:Это свершилось!> $Directory = "/var/log" anonymous(*)(2016-08-27 19:18:36)
Mozilla/5.0 (X11; Fedora; Linux x86_64; rv:48.0) Gecko/20100101 Firefox/48.0 |
![]() |
Скрыть
Re:Это свершилось!$Files = Get-Childitem $Directory -recurse AMUR-WOLF(*)(2016-08-27 19:28:22)
Отредактировано AMUR-WOLF по причине "не указана" Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:48.0) Gecko/20100101 Firefox/48.0 |
![]() |
anonymous(*)(2016-08-27 19:35:17)
Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/52.0.2743.116 Safari/537.36 |
![]() |
Скрыть
Re:Это свершилось!> Командлет Get-Childitem ищет дочерние элементы указанной директории.
The Get-ChildItem cmdlet gets the items in one or more specified locations. If the item is a container, it gets the items inside the container, known as child items. You can use the Recurse parameter to get items in all child containers. Совершенно неочевидное поведение. Строка - это контейнер букв. Вот если бы ты передал объект класса "Directory" или "Filesystem" я бы ещё понял. Но вот так вот огульно взять и принять строку за путь в файловой системе и возвращать дочерние элементы не переданного объекта, а ФС - нет, это надо сразу закопать такой шелл я считаю. anonymous(*)(2016-08-27 19:42:29)
Mozilla/5.0 (X11; Fedora; Linux x86_64; rv:48.0) Gecko/20100101 Firefox/48.0 |
![]() |
Скрыть
Re:Это свершилось!> Вот если бы ты передал объект класса "Directory" или "Filesystem" я бы ещё понял. Но вот так вот огульно взять и принять строку за путь в файловой системе и возвращать дочерние элементы не переданного объекта, а ФС - нет, это надо сразу закопать такой шелл я считаю.
AMUR-WOLF(*)(2016-08-27 19:57:49)
Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:48.0) Gecko/20100101 Firefox/48.0 |
![]() |
Скрыть
Re:Это свершилось!> Ну ты же сам понимаешь, что никто не станет заниматься дублированием функциональности и повершелл так навсегда и останется уёбищным убунтопакетом.
AMUR-WOLF(*)(2016-08-27 20:16:18)
Отредактировано AMUR-WOLF по причине "не указана" Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:48.0) Gecko/20100101 Firefox/48.0 |
![]() |
Скрыть
Re:Это свершилось!> уёбищным убунтопакетом.
AMUR-WOLF(*)(2016-08-27 20:19:42)
Отредактировано AMUR-WOLF по причине "не указана" Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:48.0) Gecko/20100101 Firefox/48.0 |
![]() |
Скрыть
Re:Это свершилось!Ладно, ту строчку правильнее было написать так: Поскольку обязательный параметр там единственный, то -Path можно не писать, и так всё ясно. AMUR-WOLF(*)(2016-08-27 20:27:15)
Отредактировано AMUR-WOLF по причине "не указана" Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:48.0) Gecko/20100101 Firefox/48.0 |
![]() |
Скрыть
Re:Это свершилось!Одна из главных фишек PowerShell, которую он наследует от .Net, это самоописание объектов. То есть каждый объект содержит в себе информацию, которая описывает его структуру. Это очень важно и полезно для интерактивных окружений: если вам попался объект, то достаточно посмотреть на него, чтобы понять, что с ним можно делать. Например, если вы имеете дело с объектом, описывающим файл, то вы можете его проанализировать и узнать, что объект способен выдавать дату своего создания, размер и так далее. Чтобы выделить из этого текста даты создания, вам придется парсить эту хрень. Это занятие усложняется еще и тем, что в разных локалях дата будет представлена по-разному. Вместо '/' будет '.' или ',', а год будет стоять первым, или день будет перед месяцем, или еще как-нибудь. В PowerShelle задача парсинга встречается редко потому, что отдельные свойства вывода можно получать через методы и свойства объектов вывода. Причем, если в $file вы запишите вывод командлета, возвращающего объекты файлов, то $file.CreationDate вернет вам не текст, а объект типа DateTime, с которым возможны свои трюки. Пример работы с DateTime: AMUR-WOLF(*)(2016-08-27 21:11:55)
Отредактировано AMUR-WOLF по причине "не указана" Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:48.0) Gecko/20100101 Firefox/48.0 |
![]() |
![]() |
Скрыть
Re:Это свершилось!> А затем, что sh, bash и прочие линуксовые шеллы морально устарели.
anonymous(*)(2016-08-27 23:34:46)
Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/52.0.2743.116 Safari/537.36 |
![]() |
Скрыть
Re:Это свершилось!Если так нужен невменяемый шелл, то недавно представили питоношелл который заменяет баш. Не помню как называется. |
![]() |
Скрыть
Re:Это свершилось!> Get-Help Get-ChildItem
Короче, трудно предугадать что там с этой строкой будет.. Во-первых вот это вот "> $now" мне категорически не нравится что шелл сам принял решение напечатать дату. А что если там будет строка вида "rm -rf /" - шелл поймет что это не дата, а команда, которую надо выполнить? А читатель кода поймёт, что это ты просто случайно enter перед именем переменной воткнул? Во-вторых, мне непонятно почему дата печатается в формате, отличном от того, что возвращает метод ToString(). Такое ощущение, что этот павершелл писали какие-то ебанутые на всю голову дауны, которых к этому принудили клоуны. anonymous(*)(2016-08-28 02:05:49)
Отредактировано anonymous по причине "не указана" Mozilla/5.0 (X11; Fedora; Linux i686; rv:47.0) Gecko/20100101 Firefox/47.0 |
![]() |
Скрыть
Re:Это свершилось!> Короче, трудно предугадать
anonymous(*)(2016-08-28 02:44:16)
Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/52.0.2743.116 Safari/537.36 |
![]() |
Скрыть
Re:Это свершилось!> Это чем же?))) Все что ты здесь нам показывал, гораздо практичнее сделать на том же питоне, если уж на баше не получается)))
AMUR-WOLF(*)(2016-08-28 05:03:24)
Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:48.0) Gecko/20100101 Firefox/48.0 |
![]() |
Скрыть
Re:Это свершилось!Работа с процессами. У меня запущен один экземпляр IDE Geany. Возьмем его процесс, сохраним в переменную: Посмотрим, что мы можем делать с процессом: Сколько потоков создал процесс? Какой путь у файла процесса? Какой приоритет? Какой размер виртуальной памяти? Список модулей, КОТОРЫЕ ЗАГРУЗИЛ ЭТОТ ПРОЦЕСС Что мы можем делать с модулями? Убьем процесс с Geany: AMUR-WOLF(*)(2016-08-28 06:08:57)
Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:48.0) Gecko/20100101 Firefox/48.0 |
![]() |
Скрыть
Re:Это свершилось!Амурыч разошелся! Ты б лучше на вопросы интересующихся отвечал. .net какой-то. В ляликсе, значит, mono надо для работы этого шелла или что? Нафиг оно надо, тады. |
![]() |
Скрыть
Re:Это свершилось!> Работа с процессами. У меня запущен один экземпляр IDE Geany. Возьмем его процесс, сохраним в переменную:
|
![]() |
Скрыть
Re:Это свершилось!> .net какой-то. В ляликсе, значит, mono надо для работы этого шелла или что?
То есть даже .Net Core не нужен. > А вообще про объекты -- это дурацкая идея во всем unix-like мире. Там все программы могут лишь вывести текст или вернуть код возврата. Нет никаких механизмов передачи этих ваших объектов из отработавшей программы наружу. Следовательно, и смысла в объектах в шелле нет. Времена меняются. Скоро будут корпоративные приложения на Linux, которые будут предоставлять командлеты, а те всегда возвращают объекты. Уже сейчас на Linux можно юзать командлеты для MS Azure. AMUR-WOLF(*)(2016-08-28 08:09:28)
Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:48.0) Gecko/20100101 Firefox/48.0 |
![]() |
Скрыть
Re:Это свершилось!Сейчас утилиты, скрипты и программы в Linux возвращают в основном или текст, или код завершения, поэтому может показаться, что объектная модель PowerShell здесь неприменима. Сохраним его в файле pythonClass.py и сделаем его исполняемым. А теперь из его текстового вывода создадим объект PowerShell и поработаем с ним: Жаль, что таким образом можно передать только объекты без методов. Но есть возможность выдавать структурированным текстом объект, содержащий в себе объекты стандартных классов .Net, такие, как DateTime или Item. Тогда можно будет преобразовать текстовый выхлоп в объект с методами. AMUR-WOLF(*)(2016-08-28 08:51:28)
Отредактировано AMUR-WOLF по причине "не указана" Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:48.0) Gecko/20100101 Firefox/48.0 |
![]() |
Скрыть
Re:Это свершилось!Поадминим задания Cron. Теперь загрузим модуль и посмотрим на доступные командлеты: Посмотрим на уже имеющиеся задачи Cron: Ничего не получили, значит, задач нет. Создадим новую: Убедимся, что задача создалась через утилиту bash: Удалим задачу: AMUR-WOLF(*)(2016-08-28 11:37:55)
Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:48.0) Gecko/20100101 Firefox/48.0 |
![]() |
vilfred(*)(2016-08-28 13:30:59)
Mozilla/5.0 (X11; Fedora; Linux x86_64; rv:48.0) Gecko/20100101 Firefox/48.0 |
![]() |
Скрыть
Re:Это свершилось!> Ok. Посчитай ошибки в логах на питоне.
anonymous(*)(2016-08-28 13:51:43)
Mozilla/5.0 (X11; Fedora; Linux x86_64; rv:48.0) Gecko/20100101 Firefox/48.0 |
![]() |
Скрыть
Re:Это свершилось!> А вообще про объекты -- это дурацкая идея во всем unix-like мире. Там все программы могут лишь вывести текст или вернуть код возврата.
anonymous(*)(2016-08-28 14:13:29)
Mozilla/5.0 (X11; Fedora; Linux x86_64; rv:48.0) Gecko/20100101 Firefox/48.0 |
![]() |
Скрыть
Re:Это свершилось!> Времена меняются. Скоро будут корпоративные приложения на Linux, которые будут предоставлять командлеты
anonymous(*)(2016-08-28 14:19:43)
Mozilla/5.0 (X11; Fedora; Linux x86_64; rv:48.0) Gecko/20100101 Firefox/48.0 |
![]() |
Скрыть
Re:Это свершилось!>> А вообще про объекты -- это дурацкая идея во всем unix-like мире. Там все программы могут лишь вывести текст или вернуть код возврата.
AMUR-WOLF(*)(2016-08-28 14:52:03)
Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:48.0) Gecko/20100101 Firefox/48.0 |
![]() |
Скрыть
Re:Это свершилось!И вот что я подумал. Если моя корпорация напишет эти несчастные 200-300 командлетов для администрирования Linux и Apach, то она заработает миллионы баксов и станет всемирно известным игроком в IT-сегменте. AMUR-WOLF(*)(2016-08-28 15:17:39)
Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:48.0) Gecko/20100101 Firefox/48.0 |
![]() |
Скрыть
Re:Это свершилось!На хуй кому нужны эти твои две строчки? В чем практичность? А мой код, даже чел незнающий питон прочтем и поймет что он делает. anonymous(*)(2016-08-28 15:24:48)
Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/52.0.2743.116 Safari/537.36 |
![]() |
Скрыть
Re:Это свершилось!> На хуй кому нужны эти твои две строчки? В чем практичность? А мой код, даже чел незнающий питон прочтем и поймет что он делает.
AMUR-WOLF(*)(2016-08-28 15:28:17)
Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:48.0) Gecko/20100101 Firefox/48.0 |
![]() |
Скрыть
Re:Это свершилось!Выше добавил в свой коммент))) Ну и ля разнообразия добавь в свой скрипт, что бы файлы к которым не удалось получить доступ как-то помечались, например прочерком в кол-ве ошибок. Ведь ты же не будешь запускать в своей корпорации скрипты из под рута))) anonymous(*)(2016-08-28 15:30:18)
Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/52.0.2743.116 Safari/537.36 |
![]() |
Скрыть
Re:Это свершилось!> Выше добавил в свой коммент))) Ну и ля разнообразия добавь в свой скрипт, что бы файлы к которым не удалось получить доступ как-то помечались, например прочерком в кол-ве ошибок. Ведь ты же не будешь запускать в своей корпорации скрипты из под рута)))
Да и из сканирования директории тоже стоит убрать эту фигню. Все исключения должны выводиться. А то на сканирование директории тоже может прав не быть. Или директория /var/log вообще будет отсутствовать. AMUR-WOLF(*)(2016-08-28 16:00:01)
Отредактировано AMUR-WOLF по причине "не указана" Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:48.0) Gecko/20100101 Firefox/48.0 |
![]() |
AMUR-WOLF(*)(2016-08-28 16:06:16)
Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:48.0) Gecko/20100101 Firefox/48.0 |
![]() |
Скрыть
Re:Это свершилось!Зато замени в моем коде две последние строчки на: И получишь))) И шо? У кого гибче в итоге?))) ЗЫ: Все жду от тебя пример скрипта с аналогичным выводом))) anonymous(*)(2016-08-28 16:22:17)
Отредактировано anonymous по причине "не указана" Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/52.0.2743.116 Safari/537.36 |
![]() |
Скрыть
Re:Это свершилось!Безусловно практичнее и понятнее, потому что легко модифицируется, пример привел и не надо запоминать новый странный синтаксис и держать в голове хуеву тучу всяких "Get-Childitem"ов))) anonymous(*)(2016-08-28 16:23:48)
Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/52.0.2743.116 Safari/537.36 |
![]() |
Скрыть
Re:Это свершилось!Вывод отличается. Питон вернул Повершелл вернул Вот я легко-легко модифицирую скриптик и получаю Строки с "Error" тоже есть в логах. А если мне нужна чувствительность к регистру, то нужно всего-лишь добавить ключ "–caseSensitive". AMUR-WOLF(*)(2016-08-28 16:29:35)
Отредактировано AMUR-WOLF по причине "не указана" Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:48.0) Gecko/20100101 Firefox/48.0 |
![]() |
Скрыть
Re:Это свершилось!Замени строчку: anonymous(*)(2016-08-28 16:32:05)
Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/52.0.2743.116 Safari/537.36 |
![]() |
Скрыть
Re:Это свершилось!> Так что со скриптом где будет N/A выводится?)))
AMUR-WOLF(*)(2016-08-28 16:37:09)
Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:48.0) Gecko/20100101 Firefox/48.0 |
![]() |
Скрыть
Re:Это свершилось!Это твоя простыня с ошибками и была что ли удобочитаемым видом? Ты что смеешься?))) В таком виде как у меня ЗДЕСЬ сделай пожалуйста))) anonymous(*)(2016-08-28 16:39:29)
Отредактировано anonymous по причине "не указана" Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/52.0.2743.116 Safari/537.36 |
|
|
|
Этот тред читают 2 пользователя: |
Анонимных: 2 Зарегистрированных: 0 |
Re:Это свершилось!
Пример использования. В философии bash вы запускаете утилиту, передаете ей в качестве параметра строку, и на выходе имеете строку. В философии PowerShell вы запускаете утилиту, передаете ей объект, и на выходе получаете объект. Всегда.
Например, запустим интерпретатор Питон с параметром:
Ок. Питон вернул нам объект. Давайте сохраним вывод Питона в переменную, а потом посмотрим на все доступные методы и свойства этого объекта:
Ок. Давайте разобъем строку на две, используя разделитель 'i'. Очевидно, нам нужно вызвать метод 'Split':
Отредактировано AMUR-WOLF по причине "не указана"
Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:48.0) Gecko/20100101 Firefox/48.0