1. Кейс может использовать любой.
2. Автодополнение замечательно работает и для команд и для аргументов.
3. Зачастую аргументы позиционированы, т.е. их имена можно не писать вообще.
4. Все аргументы можно сокращать хоть до одной буквы, главное чтобы количество введенных букв идентифицировало аргумент однозачно.
5. Есть гарантия, что все командлеты будут в едином стиле и не придется встречаться с сюрпризами, когда автор утили решил, что его способ передачи аргументов является единственно верным.
Имхо, уже неплохо. Единственное, что анноит лично меня — лучше бы они в именовании командлетов вначале располагали объект, а потом — операцию.
В повершелле своя «песочница» :) Там названия скриптлетов состоят из Verb и Noun. Для verb'ов есть продуманный список валидных вербов, отклонение от которых грохит предупреждением. Такой подход удобен в том плане, что я могу легко выбрать все команды, которые работают с определенным типом объектов. Например help *-Process дасть мне все, что работает с процессами. Иногда я даже угадывал команду по тому, что мне было нужно, хотя о ее существовании не знал :)
Естественно, CLR написан на C/C++, разумеется FCL нередко обращается к реализации WinAPI, но в исходном тезисе речь шла о том, что де повершелл нагнетает проблемы с безопасностью, а это не так, ибо управляемое приложение априори менее подвержено атакам, чем аналогичное неуправляемое.
Никаких «больших нативных кусков» нет. Не верите — посмотрите исходники. Unsafe кода в FCL очень мало, в повершелле его нет вообще.
С переполнением стека связано подавляющее большинство эксплоитов, к остальным уязвимостям доступа к памяти также толерантна. Инъекцию сделать в подписанную библиотеку с командлетами или подписанный скрипт нереально. Sql-инъекции, XSS и многое другое по понятным причинам не рассматриваю.
Вообще оно автоматизирует любое приложение, которое использует стандартное апи. В том числе, qt и java. Собственная отрисовка не является ничем зазорным, главное грамотно регистрировать оконные классы и т.п. Если уж кто-то свихнулся и изобрел свой велосипед то можно просто эмулировать движение мыши, клики и т.п.
Вообще я не собираюсь доверять MS на слово. Просто захожу на любой vulnerability database и смотрю статистику. Данная ретроспектива служит для меня основанием для моих слов, а не чьи-то обещания.
Единственный тезис, в котором я полностью с вами согласен, это тезис про карму :-)
Жалко, что единственный, но карму апну :)
все просто и понятно, текста нет, есть звуковые данные, с ними получается довольно нормально работать и без объекта
В приведенной задаче — да. А теперь просто введите awk в поиск на хабре и узнайте о том, что существуют другие задачи ;)
я безусловно рад, что на win платформе революция, искренне рад, НО есть одно «но», это безопасность… и с ней (сорри за оффтоп, но опустить вопрос довольно сложно) у MS проблемы, PowerShell дает такую массу преимуществ и новых «парадигм» ($someapp.Uninstall() и т.п.) не только администраторам, но и хакерам, что я просто диву даюсь
Фишка в том, что CLR, в котором исполняется повершелл и который рулит управляемым кодом совершенно толерантен к большинству атак.
я не понимаю, вы идеолог или ИТ-спец? Мне совершенно параллельно кто какую парадигму изменил, или наоборот не изменил. Мне удобно — я пользуюсь, не удобно — соответственно. Я сильно сомневаюсь, что теми идеями, которые вы сейчас изложили, вы пользуетесь в жизни…
Я — практик. Говорю о том, что использую. Например, буквально пару недель назад связал powershell с MS UI automation. Теперь могу автоматизировать UI-операции в таком стиле:
И еще, вы вот упоминаете про объекты, а для чего они мне? Какая полезная нагрузка? Чего я не мог делать раньше, когда у меня не было объектов? Такое ощущение, что это спасительная гавань в диалоге.
А вы посмотрите на статистику использования grep/awk для того чтобы выдернуть какие-нибудь свойства из текста, тогда может ситуация проясниться. Я вот только никак в толк не возьму, вы на самом деле думаете что сериализация+передача по пайпу+десериализация- это круче чем просто передача по пайпу? Что передача объекта, частным случаем которого является строка — это хуже, чем передача строки? Что вызов $someapp.Uninstall() по определению ущербен?
Ну и еще, PowerShell это безусловно новое и полезное явление на win платформах, но я думаю что относиться надо к этому соответственно, а не кричать о революциях и попытках изменить орбиту Земли :-)
На win-платформе это по определению революция :) Как все это выглядит на Unix-платформах я знаю очень мало, поэтому мне интересны примеры. На одном форуме холиварили с адекватными линуксоидами, было немало примеров и масса интересного для обоих сторон. К сожалению здесь заменили здоровый соревновательный дух неаргументированным загаживанием кармы.
Т.е.е вместо задачи скопировать нужные мне алиасы вы предлагаете скопировать файл, а потом некоторой утилитой удалить ненужные и при этом не забыть изучить эту утилиту. Я то просто хотел
PS:\>alias:
PS:\>copy ls sometarget
PS:\>del somealias
PS:\>move -include somemask sometarget
Запросто. IronPython поддерживает DLR, а значит я его могу поднять в Powershell. Можно вообще сделать Powershell чисто на Питоне. Ибо сам повершелл в том виде, в каком мы его привыкли видеть — просто одна из реализаций класса PSHost. Я могу ее наследовать и поднять внутри IronPython через DLR. Могу я расширить Bash таким образом?
bash/прочие консоли используют пайпы и передают через них текст. PowerShell использует пайпы, и передаёт через них какие-то собственные объекты в каком-то собственном внутреннем формате. По-моему, на этом сравнение уже можно закончить, уже после этих слов станет понятно, что PowerShell — это типовое образцовое MS-решение, полностью в MS-духе, основанное на ключевых MS-идеях разработки и маркетинга. Разве нет?
Весь дотнет рантайм давно стандартизирован и никаких секретов того, в каком формате он передает объекты нет. Я вижу другую разницу в подходах. В оригинале большинство информации является объектами. Будь то файл, картинка, XML-документ или что-либо еще. MS просто передает информацию об этих объектах как есть, обеспечивая стандартизированный способ доступа к их свойствам и методам, что характерно. При желании я могу рассматривать все объекты как строки, ибо каждый by design имеет метод ToString и посредством него будет каститься в строку.
Что нам предлагает bash&Co? Какая-то утиль берет информацию о каком-то объекте и сериализует его в текст так, как заблагорассудится автору этой утили. Я изучаю, в каком же виде эта сериализация представлена и при помощи всяких grep/awk пишу десериализацию. Причем, если автору утили в перспективе захочется изменить вывод и он по доброте своей добавит колонку или произойдет еще что-то, то все мои старания могут накрыться медным тазом. Я что-то упустил?
В другом — мы имеем несколько десятков лет эволюции, полную прозрачность спецификаций, кроссплатформенность и кросссистемность
Не могу сказать, что у MS в этом плане все замечательно, но стоит отметить, что CLI, под которой ходит Powershell стандартизирована, исходники доступны, кроссплатформенные реализации есть (как от самой МС для xbox/mobile/embeded/macos/etc, так и от их союзников в лице SUSE в виде Mono). Спецификации Powershell/гайдлайны к нему есть. Используемый язык стандартизирован. Кроссплатформенные реализации в виде того же pash тоже есть. А касательно десятков лет эволюции… этот аргумент далекое не всегда работает.
И он также умеет привычными командами удалять эти алиасы, скопировать на другой хост, переименовать и т.п.? Или мне надо освоить очередной набор ключей командной строки?
и на мой взгляд про zsh в топике упоминать не стоило, PowerShell это как планета в галактике zsh
А разве zsh как-то принципиально изменил парадигму того же bash? Имхо, это просто горизонтальный рост. Powershell — в большей степени вертикальный. Во-первых, вместо разноперых утилит, которые мы наблюдали в %windir%\system32 стала органичная система коммандлетов с четкими гайдлайнами и ООП-организацией, что с легкостью позволяет создавать новые команды, осуществляя реюзинг старых. Во-вторых, это мощный бэкграунд, как языковой в лице c#, так и библиотечный в лице FCL. С ним по силами сражаться питону, но скриптовым языкам будет тяжеловато, ибо другая весовая категория. Плюс добавлена мощная динамика в рантайме. Сможет zsh оперировать с XML, например, в таком стиле: "$doc.rootnodename.somenodename.childnonename"? В третьих — это часто упоминаемый объектный пайп. Точне, дело не столько в пайпе, а в том, что все есть объекты, в пайпе они или без оного. Я бы не сказал, что все эти части представляют из себя что-то инновационное. Но аналогичных продуктов, которые столь гармонично бы в себя вобрали практически все лучшее я пока не знаю.
2. Автодополнение замечательно работает и для команд и для аргументов.
3. Зачастую аргументы позиционированы, т.е. их имена можно не писать вообще.
4. Все аргументы можно сокращать хоть до одной буквы, главное чтобы количество введенных букв идентифицировало аргумент однозачно.
5. Есть гарантия, что все командлеты будут в едином стиле и не придется встречаться с сюрпризами, когда автор утили решил, что его способ передачи аргументов является единственно верным.
Имхо, уже неплохо. Единственное, что анноит лично меня — лучше бы они в именовании командлетов вначале располагали объект, а потом — операцию.
С переполнением стека связано подавляющее большинство эксплоитов, к остальным уязвимостям доступа к памяти также толерантна. Инъекцию сделать в подписанную библиотеку с командлетами или подписанный скрипт нереально. Sql-инъекции, XSS и многое другое по понятным причинам не рассматриваю.
Жалко, что единственный, но карму апну :)
В приведенной задаче — да. А теперь просто введите awk в поиск на хабре и узнайте о том, что существуют другие задачи ;)
я безусловно рад, что на win платформе революция, искренне рад, НО есть одно «но», это безопасность… и с ней (сорри за оффтоп, но опустить вопрос довольно сложно) у MS проблемы, PowerShell дает такую массу преимуществ и новых «парадигм» ($someapp.Uninstall() и т.п.) не только администраторам, но и хакерам, что я просто диву даюсь
Фишка в том, что CLR, в котором исполняется повершелл и который рулит управляемым кодом совершенно толерантен к большинству атак.
Я — практик. Говорю о том, что использую. Например, буквально пару недель назад связал powershell с MS UI automation. Теперь могу автоматизировать UI-операции в таком стиле:
Как бы вы решали подобную задачу на zsh?
А вы посмотрите на статистику использования grep/awk для того чтобы выдернуть какие-нибудь свойства из текста, тогда может ситуация проясниться. Я вот только никак в толк не возьму, вы на самом деле думаете что сериализация+передача по пайпу+десериализация- это круче чем просто передача по пайпу? Что передача объекта, частным случаем которого является строка — это хуже, чем передача строки? Что вызов $someapp.Uninstall() по определению ущербен?
На win-платформе это по определению революция :) Как все это выглядит на Unix-платформах я знаю очень мало, поэтому мне интересны примеры. На одном форуме холиварили с адекватными линуксоидами, было немало примеров и масса интересного для обоих сторон. К сожалению здесь заменили здоровый соревновательный дух неаргументированным загаживанием кармы.
Весь дотнет рантайм давно стандартизирован и никаких секретов того, в каком формате он передает объекты нет. Я вижу другую разницу в подходах. В оригинале большинство информации является объектами. Будь то файл, картинка, XML-документ или что-либо еще. MS просто передает информацию об этих объектах как есть, обеспечивая стандартизированный способ доступа к их свойствам и методам, что характерно. При желании я могу рассматривать все объекты как строки, ибо каждый by design имеет метод ToString и посредством него будет каститься в строку.
Что нам предлагает bash&Co? Какая-то утиль берет информацию о каком-то объекте и сериализует его в текст так, как заблагорассудится автору этой утили. Я изучаю, в каком же виде эта сериализация представлена и при помощи всяких grep/awk пишу десериализацию. Причем, если автору утили в перспективе захочется изменить вывод и он по доброте своей добавит колонку или произойдет еще что-то, то все мои старания могут накрыться медным тазом. Я что-то упустил?
Не могу сказать, что у MS в этом плане все замечательно, но стоит отметить, что CLI, под которой ходит Powershell стандартизирована, исходники доступны, кроссплатформенные реализации есть (как от самой МС для xbox/mobile/embeded/macos/etc, так и от их союзников в лице SUSE в виде Mono). Спецификации Powershell/гайдлайны к нему есть. Используемый язык стандартизирован. Кроссплатформенные реализации в виде того же pash тоже есть. А касательно десятков лет эволюции… этот аргумент далекое не всегда работает.
А разве zsh как-то принципиально изменил парадигму того же bash? Имхо, это просто горизонтальный рост. Powershell — в большей степени вертикальный. Во-первых, вместо разноперых утилит, которые мы наблюдали в %windir%\system32 стала органичная система коммандлетов с четкими гайдлайнами и ООП-организацией, что с легкостью позволяет создавать новые команды, осуществляя реюзинг старых. Во-вторых, это мощный бэкграунд, как языковой в лице c#, так и библиотечный в лице FCL. С ним по силами сражаться питону, но скриптовым языкам будет тяжеловато, ибо другая весовая категория. Плюс добавлена мощная динамика в рантайме. Сможет zsh оперировать с XML, например, в таком стиле: "$doc.rootnodename.somenodename.childnonename"? В третьих — это часто упоминаемый объектный пайп. Точне, дело не столько в пайпе, а в том, что все есть объекты, в пайпе они или без оного. Я бы не сказал, что все эти части представляют из себя что-то инновационное. Но аналогичных продуктов, которые столь гармонично бы в себя вобрали практически все лучшее я пока не знаю.