Pull to refresh

Comments 70

> PowerShell ничем не хуже обычного cmd.exe
вы пропустили wmic? ;)
Спасибо за наводку. Интересная вещь.
каюсь, пропустил ) но обязательно посмотрю, спасибо.
лучше бы bash переписали для винды
По возможностям PowerShell не уступает Bash.
ну так давно уже пора нормальный cli для винды написать.
Правда, это Вы на сайте МС прочли?
Тоже почему-то именно так и подумал…
Вообще, насколько я понял, лет через 10 в каком-нибудь очередном релизе Форточек все-таки отделят всю графическую подсистему от ядра оси. И настанет в Форточках эпоха X-Серверов.
Ну и так далее… Монолитное ядро… Кастомные Окружения рабочего стола… Everything is a file… До открытия исходников под GPL отсюда совсем недалеко. Кто там, говорите, победит в итоге? ^_^
В виндовс сервер 2008 уже отделили гуй от ядра, на сервер можно поставить сисему без окошек
Победит то, что окажется удобнее конечному потребителю. Windows-way не предполагает настройку кастомных DE пользователем, также как и раскрытие исходников под GPL.
И да, вы не поверите — про PowerShell я на самом деле прочел на сайте Майкрософт. А еще там же я скачал документацию и примеры в огромном количестве, посмотрите только на script Repository.
Windows-way… звучит-то как.
Насколькоь я понял, основная аудитория PowerShell — это как раз сисадмины. Вот только ставить под какие-то задачи виндовые сервера… Ну знаете ли… У меня возникают сомнения…
Когда вам надо будет поднять AD в сети из >50 компов сомнения отпадут.
PowerShell использует .net, а .net в свою очередь не уступает Bash
«Ламборгини» выпускает спортивные машины. Все это знают и это как бы синоним спорткаров. Но вот незадача, они еще выпускали тракторы и джипы (военные). И вроде в общем контексте, если человек будет говорить о «Ламборгини» как о спорткарах, он особо не ошибется. Но если же обсуждать конкретно марку, то упущение факта производства других типов машин будет грубостью.
Вот такая вот метафора. «Ламборгини» — шелл, джип — ПовреШелл, а „Кунташ“, например, — Баш. Да, вы правы, у тех и других есть колеса, двигатель, трансмиссия. Но вот они совсем не похожи и для разных целей используются.
За ПоверШеллом я слежу с начала 2006 года, он сразу привлек мое внимание, но вот незадача, он хорошо для автоматизации и разового использования, ну неудобен он мне и все. С башем я породнился в первую же минуту. И в реальных условиях баш+перл+крон для меня намного приятнее. Ну конечно, портировать Баш под вин архитектуру, как предлагают ниже, это полный маразм.
метафора конечно ничего так, но есть одно НО: «ну неудобен он мне и все».
это но перечеркивает весь смысл Вашей метафоры
«Я» — это обычный пользователь, которому не тепло, не холодно от возможностей ПоверШела, а от моему другу админу-розрабу, который не шарит С# это идеальное решение. Это дополнение к метафоре =)
а че ему влом выучить if… then… while? у баша тоже такие есть, никто ведь не заставляет учить все десятки тысяч классов.нет, базовый функционал аналогичен башу, но если захочется чего-то помощней, вместо перла или питона.нет пойдет отличненько
Если я не ошибаюсь then'a там нету (в ПШ и в Си-подобных языках) ибо синтаксис его не требует, не паскаль же, а if есть в command.com времен доса 6.0, посмотрите пожалуйста.
Ну while, это прямо долгожданный прорыв, а про foreach, — пиковое достижение виншелов, я уже молчу =) Дот НЕТ не переносим в отличии от того же Питона и Перла (который уже, давно, кстати, ООП) и сложнее (опять же, субьективно).

Если быть откровенным, то тут дело не в тупости программных архитекторов МС или программеров, а в самой глобальной модели ОС, — ну не смогут они отточить функционал шела до уровня никсовых за 5 лет, нереально это, у них разница в развитии более 30 лет, опять же я бы мог приводить примеры с автопромышленностью, все дается опытом и постоянным оттачивание. А если еще учесть и то, что МС достаточно вяло воспринимает пожелание пользователей, то тут картина не очень, еще долго им работать в плане удобства.
if… then… while — читай как базовые возможности
ооп уже как бы не время хвастаться, непонял к чему это было
.нет очень даже переносим (моно — яркий пример)

а чем же функционал баша лучше функционала повер шелла? (это не ирония, я на самом деле хочу знать)
Зря вы считаете, что не время хвастаться, если почитаете зарубежные статьи посвященные ПШ, то основным преимуществом называется его ООП'шность.

Ни видел не одного яркого, нет… не яркого, а реального и нужного примера такого работающего переноса, ай да… еще ж WinAPI, хотя в последнее время МС все больше рекомендует воздержатся от его непосредственного использования, приукрашивая это недолугими примерами из библиотеки дот нет, а внизу пишет примечания, что мол эти примеры для ознакомления и МС ни за что не отвечает, в случае их применения в реальном коде :)))

Функциональность лучше тем, что за ним можно и приятно работать, он у меня всегда открыт и я постоянно ним пользуюсь, вот сомневаюсь, что и ЦМД, и ПШ также украшают стол вин-программера или на худой конец админа. Я за полчаса могу написать программу для работы с сетью используя стандартный набор программ (которые все изначально работают в консоли и поддерживают контейнеры), парсить их вывод скриптом на перле, и им же ними управлять. Мой друг админ под вин, потратит на это же вчетверо больше времени, половина которого уйдет на бессмысленную отладку работы сокетов…
Если вы не работаете в никсе, мне бесполезно вам объяснять. Это надо просто почувствовать.
тоесть преимущество баша в «стандартный набор программ (которые все изначально работают в консоли и поддерживают контейнеры)» а вместо самого баша можно использовать все что угодно получается… зачем тогда меряться пиписьками если в итоге рулит набор утилит?
Рулит концепция, честно говоря, в детали других никс шеллов я не углублялся. Ответ на вопрос — моя метафора :)

По сути, есть черное окно, куда можно вводить команды. Вопрос, какое окно лучше, практичнее и удобнее? Ответ — баш.
Почему это было бы лучшим решением, на ваш взгляд?
Мне кажется, что концепция PowerShell выгодно отличается от basha хотя бы тем, что она — новое изобретение, а не ремикс давно известных. Кстати, имхо, на bash'e было бы сложно сделать некоторые вещи из тех, о которых написано в упомянутой книге.
power shell не новое изобретение. а просто концепцию стандартного шела для никсов переврали для микрософта. то что было бы сложно для вас на баше наверняка не сложно для тех кто баш знает.
В Вашем случае советую запустить PowerShell в виртуальной машине и наконец-таки его попробовать.
уже давно попробывал.
Да это супер если учесть что раньше пародия на cli была.
ну, может быть, вы и правы, с башем я не работал, но слышал отзывы.
однако, мне все-таки кажется, что с объектной моделью работать удобнее, нежели с текстом. во всяком случае, олдскульные методы не теряют актуальности (т.к. ToString всегда в кармане :) ).
Когда это оно оказалось новым-то? О_о Хотя таки да… Для заядлых форточников это новая, революционная и инновационная технология администрировани и взпимодействия с тем, что он таки администрирует… Высший пилотаж просто. Это же надо — Windows-сервер рулить в консоли и при этом — все работает! Нет, определенно для этого нужно еще 5 сертификатов получить у Microsoft и еще пару на Brainbench и еще пару у независимых аттестаторов…
и откуда столько ненависти и презрения?..
Да почему же ненависти-то? Все на самом деле так и есть.
Почему именно bash? Мало что ли других оболочек в тех же*nix системах?
Может потому что вы привыкли именно к bash? Цель PowerShell не в пользовательской оболочке, удобной линуксоидам. PowerShell — это новые возможности, требующие новый синтаксис.

Это не просто оболочка, это среда полностью интегрированная с CLR, с которой можно работать как на уровне командной строки, так и программном, на уровне объектов .Net.

Все это позволяет очень упросить скриптовое администрирование, манипулируя объектами, а не строками.

А для использования в качестве файлового менеджера PowerShell поддерживает привычный синтаксис как из cmd, так и большинство привычных nix-комманд.
Лучше бы вменяемые текстовые конфиги сделали. За это бы Microsoft спасибо сказали бы очень многие.
он уже давно портирован и успешно применяется
sourceforge.net/project/showfiles.php?group_id=2435&package_id=24963
в sfu легко добавляется, как и bash/остальное, во всех nt
А что такое SFU?
Я про то, имеется ли какое-либо встроенное консольное средство управления с шифрованием.
ещё ранее interix и далее sua (subsystem for уних-based applications) тк вроде попала под всеобщий запил

это надо powersshell смотреть ;)
Сам пока PS толком не копал, но примеры работы с .NET (на примере SharePoint) очень впечатлили
C точки зрения разработчика (не админа) — так себе.

Базовые фичи недоделаны (у меня в csv нет заголовков — значит надо ждать PowerShell 2 или писать парсинг с нуля).
Переусложнённая разница между объектами и хешами.
Производительность вызова .NET методов ужасна.
Хотел сделать импорт из файла в миллион строк — 70% времени ушло на Method.Invoke, и это при том что я указал фиксированный метод.

Но написать несложный one-liner, особенно использующий реестр — вот это приятно и удобно.

Если кратко, для тех вещей, для которых есть провайдеры (реестр, sharepoint, AD) — удобно.
Но шаг влево/вправо часто приводит к огромным и переусложнённым скриптам.
>(у меня в csv нет заголовков — значит надо ждать PowerShell 2 или писать парсинг с нуля

Заголовки можно передать как параметр ipcsv
В какой версии PowerShell?
Если я правильно понимаю, PowerShell 2.0 есть только в виде CTP, а 1.0 этого не понимает.
в 2.0 CTP 3 — вполне пригоден к использованию. Что в 1.0 — не знаю
Верю.
Но насколько я помню PowerShell не поддерживает две инсталляции одновременно (1.0 и 2.0), а у меня не было желания на сервере заказчика заменять стабильную версию чего-либо на CTP, если в этом не было жизненной необходимости.

Вот если бы import-csv умел работать построчно (выдавая массив или что-нибудь там) — проблемы бы с самого начала не было.
Если кратко, для тех вещей, для которых есть провайдеры (реестр, sharepoint, AD) — удобно.
Но шаг влево/вправо часто приводит к огромным и переусложнённым скриптам.


Хотелось бы пример и сравнительный код на баше
Я не пишу на баше, потому что я
a. не админю линукс
б. знаю перл

Легко поверю что это проблема всех скриптовых языков, более того, поверю что PowerShell выигрывает у баша.
Тем не менее перлу на мой взгляд он проигрывает в понятности (если не считать тех вещей для которых есть провайдеры, но это я уже сказал).

Пример сложного скрипта так сходу не приведу, ну пример шага влево с тем же csv (не мой):
get-content file.csv|select-object @{e={$_.split(',')[0]};n='Country'},@{e={$_.split(',')[1]};n='Points'}
это если не нужны хедеры, и это ведь ещё неправильный код — он подавится на заэскейпленых символах.

Скрипт импорта (из-за производительности) я в итоге написал на boo (http://boo.codehaus.org/) и не жалею.
Каким образом на boo вы обошли отсутствия корретного парсинга CSV?
Положил рядом вот эту библитеку (http://www.codeproject.com/KB/database/CsvReader.aspx).
Сделал import LumenWorks.Framework.IO.Csv from 'LumenWorks.Framework.IO' (если не путаю по памяти).

Дальше просто. Кстати и импорт таким образом гораздо проще чем стандартное LoadAssembly в PS.
Ну в принципе, я думаю, на PSh было бы ее использовать немногим сложнее
Кстати можно упростить:

Вынести повторяющийся split отдельно
gc file.csv | %{ $_.split(',') } | select @{e={$_.[0]};n='Country'},@{e={$_.[1]};n='Points'}


Ужасные хешы можно поробовать сконвертировать в объекты по другому:
powershell.com/cs/blogs/tips/archive/2008/11/14/converting-hash-tables-to-objects.aspx
Другой пример шага влево — out-excel. Пример функции, который можно найти в инете, не работает с определённым сочетанием региональных настроек Экселя (уже забыл в чём там конкретно дело). Теоретически это лечится выставлением культуры, но выставление культуры стандартным образом через currentthread не работает в powershell, по неизвестным причинам.
Ага — поискал и нашел массу уродских воркераундов типа вызов через рефлешн всех методов — сам не сталкивался
— PowerShell ничем не хуже обычного cmd.exe

Тормознее, больше жрет памяти, меньше инсталляционная база — за удобствор надо платить

— Не очень понравился процесс ввода длинных команд и их редактирования (в случае, если они многострочные)о

в ISE вроде нормально — перехотд на следующую строчку Shift + Enter. Если хочется большего — набрать в верхнем окне редактора ISE и запустить.
Что за ISE?

Советую также попробовать PowerGUI. Вполне удобный редактор для PS-скриптов с отладкой и прочими вкусностями.
— мне не нравится то, что нужно предварять имя любой переменной знаком $ или $_ в случае обращения к переданному объекту. Но, считаю, что к этим неудобствам вполне несложно привыкнуть, зато в коде сразу видны переменные + минимизируется число телодвижений.

Как бы вы отличали переменные от строчек, если бы они не отделялись символом $. В cmd было аж два знака %name%

Что бы значило gc test — получить содерджимое файла test или получить содержимое файла с именем лежащим в переменной test?
Я не совсем понимаю, чем это лучше, к примеру, питона?
Как минимум, это удобно для тех, кто знаком со средой .NET — привычные инструменты из команд-лайновой оболочки.
z1. тем чем шелл лучше языка программирования — предназначен для работы с файлами и решения сиюминутных задач. Попробуйте на питон перевести

ls c:\windows -rec -fil *.dll | ?{ $_.IsReadOnly }


вывести все файлы с атрибутом 'read only' из c:\windows и подпапок

или

gsv *sql* | ft -group status


Вывести в табличку все вервисы в название которых входит SQL и скгруппировать по статусу

2. Тем, что поддерживается MS в своих продуктах — напр Exchange, SQL server
Прелесть PS в том, что он работает с объектами — .NET, COM. Соотвественно с этими объектами можно вытворять все что угодно. Вся функциональность .NET-framework'а у вас в консоле и скриптах.

Давно надо было заменить cmd на PS, еще с момента появления .NET.
Ну это смешно. В с 95 года по 2003 на весь Божий свет громогласно заявлялось, что CLI — дела давно минувших дней, страсть юниксовых зубров и прочих отморозков. Теперь же вдруг оказалось, что вот, мол, есть необыкновенная, новая, божественная технология скриптования…

Вот почему-то кажется, что всякие там *sh переживут powershell.
Для обычных пользователей (не сисадминов и не разработчиков) GUI действительно предпочтительнее CLI в подавляющем большинстве случаев. Поэтому, в такого рода заявлениях нет ничего удивительного. Все равно бухгалтерам в сто раз удобнее работать с помощью несложных тыкательных интерфейсов, нежели соображать, какую команду ввести в консоль. А для специализированных задач CLI необходим как намного более гибкий (а вместе с тем, и сложный) инструмент. И, мне кажется, что здесь нет никакого противоречия.
противоречие заключается в том, что Microsoft занимается не только домашними и офисными системами, не так ли? В серии NT тоже ведь продвигалась новая парадигма управления компьютером, и тоже не было приличного родного CLI-интерфейса. Ин-ту-и-тив-на-я, как соска для младенцев.
Несложные операции администрирования тоже неплохо заворачиваются в концепцию графического интерфейса.
Ну да. Несложные операции администрирования даже лучше и лакончиней заворачиваются в простые команды :)
у команд плохо с эксплорабилити
:) Действительно, нужно доки читать :)

Каждая классическая команда или программка в *никсах — это простой кирпичик. ПРи помощи простых же средств из них можно волшебные штучки делать, для которых в интерфейсном смысле придется та-а-а-а-а-акого нагородить…

Вы видели «интуитивный» интерфейс современных программ-монстров? Автокад из чертилок; Гудини, Блендер, Макс из рисовалок; Студия и Эклипс из программировальных; Офис из офисов. Хренушки вам интуитивность; там ж десятки кнопочек, графиков, менюшек, подменюшек… И все это еще загрузить надобно. :)
1. А они увидели, что юниксоиды внедряют гуй и решили отомстить
2. PSh не для конечных пользователей а для виндовс-отморозков
А как же автодополнение команд? Я такой возможности в powershell не увидел…
Sign up to leave a comment.

Articles