Как стать автором
Обновить

Комментарии 112

Неплохая заменя консоли
«Неплохая»? Это отличная ей замена. Мощный язык программирования с очень удачной парадигмой. Решение передавать по конвейеру не строки, а объекты — это очень хорошая находка.
Где замена консоли? Язык — да. А консоль (ака терминал) та же убогая.
Объясните что вы имеете ввиду.
Та консоль которая «ака терминал», действительно убогая, осталась еще с незапамятных времен. К счастью она не единственная. В комплект 2.0 входит прекрасный, написанный с нуля PowerShell ISE. Кроме того существует множество сторонних реализаций консолей, например PowerShell Plus (бесплатен для некоммерческого использования).
Какая она убогая… Боже мой, на ней можно крестики-нолики и сетевой чат написать. Не хороните cmd.exe
Какие там крестики нолики… На PowerShell в той же консоли делали Space Invaders ;) ps1.soapyfrog.com/2007/01/02/space-invaders/ и цветной блекджек еще был :)
Я конечно понимаю, но возможностей cmd.exe и wscript хватает с головой на данный момент в решении многих задач.
Отлично сформулировано :) Согласен :) Поэтому никто пока и не собирается убирать из системы cmd и wscript :)
Но PowerShell за некоторые вложения времени в изучение, очень сильно облегчит решение всех ваших текущих задач, и добавит немало новых возможностей.
Да, кстати, было бы интересно узнать что люди понимают под убогостью этой консоли. А то выяснится что эти проблемы являются лишь проблемами cmd :)
Для меня лично главным недостатком является отсутствие нормальной поддержки юникода. Так как сам по себе PowerShell насквозь юникодный, это иногда доставляет большие неудобства.
Еще могу назвать неудобство изменения ширины окна вместе с буфером. Для этого приходится лезть в настройки.
А что не нравится вам?
Чему- чему а придумывать велосипед у Майкрософт в крови :)
У Microsoft нет необходимости поддерживать TCP/IP. © Билл Гейтс, 1994г.
Microsoft изобрела новый протокол. Мы называем его TCP/IP. © Билл Гейтс, 1995г.
Расскажите какой велосипед, в данном случае, изобрела Microsoft. Что бы вы предложили использовать, близкое по возможностям и функционалу к PS?
да ничего он не предложит, как можно что-то предложить, если абсолютно не разбираешься в предмете?
Попробуйте Unix shell и увидите с чего PowerShell слизан — абсолютно тот же функционал в Unix давно доступен с коробки. Я не хочу разводить holy wars, просто сравните возможности.
BTW у меня Windows стоит cygwin и win bash.
Дорогой мой человек! Я за Linux в первый раз сел в 1997 году. За это время я пробовал zsh, tcsh, bash. И я, в отличии от вас, всё-таки сел и разобрался с PowerShell.

Что я хочу сказать. Они совершенно непохожи (что вы имеете ввиду под Unix shell, кстати?). Microsoft ничего не слизал.
Windows PowerShell 2.0 позволяет вам запускать команду на одном или более удаленных компьютеров с одного рабочего места — rsh

Windows PowerShell 2.0 позволяет запускать команды и выражения асинхронно и «в фоне» без взаимодействия с консолью. — screen

Глобализация скриптов Эта новая функция позволяет скриптам на Windows PowerShell отображать мообщения на том языке, на котором говорит пользователь и который установлен в системе — locale.

продолжать?

А то что сели за unix в 1997 и разобрались с bash'eм — вообще не аргумент.
Вы всё-таки не читайте этот текст (вы его понимаете превратно), а разберитесь с PS. Например, посмотрите как устроен удалённый запуск. Он очень удобно интегрирован в shell, у него другая идеология, чем у rsh. Например, удалённый запуск команды вернёт объект.

Ещё раз повторюсь: вы не понимаете что такое PS, какие у него функции, что он позволяет делать, но пытаетесь судить о нём, пользуясь какие-то поверхностными знаниями или своими заблуждениями по этому поводу.
В своих комментариях я писал про _идею_, а не реализацию. То что «удалённый запуск команды вернёт объект» — деталь реализации функционала, а не самой идеи Remoting.
У удалённом взаимодействии вообще нет ничего нового и чудесного, тут никто ни у кого ничего не слизал, это просто часть реалий. Эта деталь, что запуск команды вернёт объект очень важна, я просто не уточнил что за объект возвращается.

Например, удалённый запуск ps вернёт коллекцию объектов, у каждого из которых будут свойства: имя процесса, pid, размер занимаемой памяти и так далее. Понимаете? Там не просто строки по конвейеру ходят, а именно объекты.

Так что разница с rsh тут громадна. Удалённый запуск в PS больше на Корбу похож, если уж с чем-то сравнивать.
Ну и что, что возвращается именно объект, ну и где тут технологический прорыв? Ну прикрутили к системе бинарные Web Services — так уже давно куча софта управляется.
Вы написали: «чему- чему а придумывать велосипед у Майкрософт в крови :)», я спросил у вас какие могли бы быть альтернативы, вы предложили семейство unix shell (имея ввиду bash, видимо), я вам написал, что bash не альтернатива и расписал достоинства PS.

Теперь вы пишите что-то о технологическом прорыве. Никто не утверждал, что произошёл какой-то прорыв. Просто в Windows появился скриптовый язык командной строки по мощности сравнимый с Python, например.
В том как раз соль что у «в Windows появился скриптовый язык командной строки по мощности сравнимый с Python, например» — и более-менее полноценным стал за последний год. Именно поэтому я написал об изобретении велосипеда.
Почему вы написали про велосипед я не понял.
а питон — не шелл же. в юниксе нет шелла похожего на питон.

не считая iPython, которого никто не поддерживает
Попользуйте Google, обновите сведения.
какой запрос? по ipython support ничего по быстрому не нашел — расскажите.

Кстати там тоже объектный пайп или это просто шелл с питоном в сердце?
>>>нет шелла похожего на питон

опечатался — похожего на PoSh
Замечу что Remoting в PS отличается от rsh не только возможностью передачи объектов, но и например фичами типа restricted runspaces, one to many, импорт/экспорт сессий, и т.д.
Идеи, не патентуются к счастью. А то прогресс остановился бы. Патентуются реализации идей — только они имеют смысл.
А то что сели за unix в 1997 и разобрались с bash'eм — вообще не аргумент.
Аргумент то, что я умею писать программы на bash и Powershell (и немного на zsh и tcsh), так что имею право сравнивать.
вам надо написать статью, про то, чем отличается PoSh от обычного текстового шелла. А потом все будем тыкать в нее носом
Целые книги на эту тему есть :) Я уже две прочитал, собираюсь третью читать.
ну общее же место во всех ветках про PoSh обязательно кто-то скажет, что микрософт изобрел bash
чем отличаются «программы» bash от zsh в таком случае? :) Тогда как 99% скриптов пишутся и вовсе под sh (даже если натравлено на bash/zsh при этом то скрипты *.sh исполняются в sh-режиме), а bash/zsh используются по большей части в интерактивном лишь режиме.

Вывод: Вы не компетентны в этом вопросе, увы.
В каком таком случае? Что-то я не понимаю о чём вы и как вы сделали свой «потрясающий» вывод.
троллите?

смотрите на ваш бинарник sh, он будет симлинком на bash/zsh. И когда в скрипте стоит !#/bin/sh (99% случаев), то «Zsh tries to emulate sh or ksh when it is invoked as sh or ksh respectively» (выдержка из мана zsh, bash делает то же самое).
Это я-то троллю?

Я не понимаю чем ваше наблюдение, известное любому школьнику, ценно для меня. Что вы хотели показать этим замечанием, я тоже не понимаю.

Если я говорю «программировать на bash», я имею ввиду, что скрипт запускает именно bash, то же касается zsh.
Ну да, а то, что вы используете Windows с cygwin (какой крутой хакер :-)) — это аргумент
да, мерятся все-таки лучше с такимиже объектными шелами, а не со старичками какими бы крутыми они не были:) Радует что павершелл подстегнул разработку и интерес к таким же аналогам на других платформах. Ну и еслибы мои друзья-виндоадмины начали писать скрипты и пользоваться ими я бы порадовался еще больше:)
Я вас уверяю, большинство действительно профессиональных (хотя спорное определение конечно :)) администраторов Windows уже давно пишут скрипты. С PowerShell это занятие конечно становится гораздо проще и доступнее.
> Попробуйте Unix shell

а что это такое? какой юникс вы имеете в виду? и который шелл из доступных? Объясните пожалуйста свою точку зрения подробнее, мне очень интересно!
Я говорю не о реализации, а о самой идеи функционала. Заявление возможности скриптинга ремоутного и бекграундного запуску скриптов/команд поддерживаются в Unix-like OS'ьках уже давно. А что такое Unix shell — почитайте га вики en.wikipedia.org/wiki/Unix_shell
Ну, вы знаете, запуск в background поддерживает и Виндами давно, в виндах есть команда «start». Речь, как я написал выше, совершенно не об этом.

Сравнимые по мощности с bash шеллы тоже есть под DOS и Windows давно, правда, это они написаны не Microsoft, но разве это важно? Это, например, 4DOS и 4NT.

Возможность удалённого запуска программ важна не наличием самой возможности, а реализацией. Как я уже упоминал, в PS она напоминает Корбу, а это уже совсем другие возможности.
шелл юникса — уже вещь в себе проверенная временем и тоннами человеко-часов. И крута она не столько сама собой, сколько тоннами «обвеса» в виде мелких консольных программ.

Сам же по себе шелл — тут не на wow-эффект надо ориентироваться и не читать всякую лабуду, а работать.
Что-то я не понял в чём вы мне пытаетесь возразить. Скажите, вы вообще изучали Powershell? Можете мне по существу сказать что можно сделать в bash и нельзя в Powershell?

Я-то изучил и то и другое, а вы, кажется мне, просто тролль.
что значит «изучали»? Я уже не раз сказал, что плюсы и минусы терминала становятся известны лишь через несколько месяцев работы.

Открывайте man bash — больше половины функционала нет в Powershell, но я не говорю что он там при этом нужен.
Никаких специальных значения в слово «изучали» я не вкладываю.

Я много-много раз открывал за прошедшие годы man bash, не скажу, что знаю его досконально, но на очень и очень хорошем уровне. Неплохо знаю PowerShell. То и другое знание даёт мне право сравнивать и делать выводы: PS превосходит bash по возможностям.

Расскажите мне пример функционала, который есть в bash, но его не в PS?
Да, в своём сравнении вы можете использовать любые обвесы в виде мелких консольных программ.
Без «обвесов» UNIX шеллы не выдержат никаких сравнений. Впрочем отметать их тоже было бы нечестно. Всё таки ~10 лет написания всевозможных утилиток действительно сделали шеллы почти всемогущими (хотя заслуга шеллов в этом слабая конечно :)). Именно благодаря этим «обвесам» они еще хоть как то смотрятся в сравнении с трехлеткой PS :)
Ну да, возьмет Microsoft и вставит Unix Shell в Windows. А вас я увижу в первом ряду юниксоидов, кричащих о нарушении лицензии.
Вы удивитесь, но вообще то уже давно вставила :) Раньше надо было доставлять дополнительно, но с Vista и 7 идёт уже в комплекте, надо только включить :) Лицензии не нарушены, кстати :)
Разумеется позиционировать это как замену PS никому в голову не придёт. Просто для облегчения миграции со старых платформ :)
сслыки то есть на цитаты или просто троллите помаленьку?
UNIX руководство системного администратора, третье издание, стр. 283.
А. Танненбаум — «Компьютерные Системы» — страницу не назову но все кто читал знают.
книги по Unix — это уже цитатники Гейтса? больше похоже на очередные отрослевые мифы, как про «640 кб памяти», фразу которую Гейтс так же не говорил.
Перед тем как писать на тему OS сначала прочтите книгу Танненбаума чтоб иметь представление что ето и как оно устроено.
я на темы Unix не пишу, спасибо за предложение
НЛО прилетело и опубликовало эту надпись здесь
«По запросу gates в этой книге ничего не найдено»

где смотреть? дайте хоть номер страницы по вашей ссылке
НЛО прилетело и опубликовало эту надпись здесь
ну да, ни источника, ни указания на место и время цитаты, просто автор постебался, а на хабре теперь используют как правду
В 1994-м году уже существовали первые публичные версии Windows 95 (Chicago), с TCP/IP на борту. До 1994-го был пакет Microsoft Snowball, добавляющий поддержку TCP/IP к Windows 3.11 for Workgroups.
НЛО прилетело и опубликовало эту надпись здесь
Странны ваши слова про TCP/IP. Как же быть с пакетом Microsoft Snowball, который добавлял в Windows 3.11 for Workgroups поддержку TCP/IP? А в 1994-м уже были первые версии Chicago — Windows 95.
Отличное сравнение. Правда было весело наблюдать как после появления вовсю зеленого столбца PowerShell началась детализация строк до уровня фичуличек которые в PS пока не реализованы :)
Особенно прикольно выглядели строки по поводу лицензии, где наличие Open Source лицензии засчитывалось как преимущество :) Сейчас правда поправили :)
Молодцы, сделали очередной велосипедик. Когда Микрософт перестанет создавать велосипеды и начнет использовать существующие решения над которыми у них нет полного контроля, это будет значить что дела у них плохи.
А какую замену PS вы бы хотели видеть в Windows?
Python
НЛО прилетело и опубликовало эту надпись здесь
Вы можете поставить себе под Windows Python уже сейчас, возможностей PowerShell вам это не даст.
Вероятно не даст, поскольку нет нормальных биндингов к WMI и среды выполнения (шелла). MS в позиции догоняющего здесь, в отличие от линукс ворлд где отличный шелл радует администраторов уже давно. Что же мы видим? Они изобретают новый скриптоподный шел для управления IT инфраструтурой который будет работать только под Windows. Они опять увеличивают сущности и усложняют жизнь администраторам гетерогенных сетей и разработчикам, которым нужно теперь знать +1 новый язык. Это шаг назад от WinRM/WS-Man. Хорошее решение облегчало бы управление инфраструктурой где вендоров ОС больше 1 и без необходимости вводить дополнительные языки программирования.

Я могу согласится что для Windows это лучше чем было (cmd.exe), но хуже чем могло бы быть если бы MS могло отказаться от принципа велосипедности при проектировании решения.
Вы не изучили предмет. Powershell взаимодействует с .NET и будет работать везде, где есть .NET. И Powershell лучше, чем любой распространённый shell под Unix.
ORLY? Не поскажите как бы мне запустить PS script на Linux с Mono?
Здорово. Кратко посмотрел можно ли это использовать:
> It's a pretty challenging to defined the grammar correctly since there is no publicly available complete grammar description.

~50% of public PowerShell classes defined.
~40% of framework functionality operational.
Ну а что вы хотели, полной реализации PS на неполной реализации фреймворка? :)
Как PowerShell может быть шагом назад от WinRM/WS-Man если как раз он и начал вовсю использовать их возможности в Windows? :)
Кстати через тот же WS-Management PowerShell позволяет управлять инфраструктурой где куда больше 1го вендора :)
Python — не шелл
Берем IPython и брюки преварщаются… брюки превращаются… Ну вы поняли.
вы конкретно работали с IPython? Можете про него рассказать? Например, пайп там объектный?
Не настолько много чтобы про него что-нибудь рассказать, у меня все таки не так много у меня задач администрирования.
Таким образом PS можно превратить в что угодно, начиная от вебсервера, до ОС. Большую часть возможностей PS2.0 можно было реализовать и в 1.0 при наличии желания. Просто MS не любит заявлять что «можно всё, при желании реализуется скриптами» :)
Можете считать что дела у MS уже давно хуже некуда. Они уже вовсю используют например XML или WS-Management :) Впрочем подобного тьма :)
По поводу замечания на тему win7 — добавьте — второй повершелл на 7ке и на 2008r2 ставится поверх первого. т.е. в %system32%\powershell\v1.0\ (разрабы в курсе и просто говорят — пока фреймворк не поменяется на несовместимый — не будет меняться версия повершелла). Вот такой нюанс.

Проверить же реальную версию можно кмдлетом get-host
хм. странно, у меня в Win7 версия PowerShell 2.0
или я не понял вашего комментария?
как вы это определили :)?
Дело в том, что в релизе — повершелл 1.0 (т.к не было релиза на момент выпуска 7ки).
Далее похоже было выпущено обновление с выходом 2.0.
Но обновление поставилось не в %system32%\powershell\v2.0\
а в %system32%\powershell\v1.0\ затирая 1.0 повершелл.
У 2.0 похоже еще есть режим совместимости — запуск как 1.0
определил get-host:

Name: Windows PowerShell ISE Host
Version: 2.0
InstanceId: b6d17b61-7b91-42da-aaf6-67624cda9a23
UI: System.Management.Automation.Internal.Host.InternalHostUserInterface
CurrentCulture: ru-RU
CurrentUICulture: ru-RU
PrivateData: Microsoft.PowerShell.Host.ISE.ISEOptions
IsRunspacePushed: False
Runspace: System.Management.Automation.Runspaces.LocalRunspace
а вообще глянул в папку, действительно v1.0 называется
Вы ошибаетесь, 2 раза.
В Win7 и 2008R2 предустановлен PowerShell 2.0.
Путь к файлам — \v1.0\ и расширение .ps1 оставлено в целях совместимости. Нет смысла осложнять жизнь администратором из вредности. Особенно учитывая что 2.0 максимально обратно совместим с 1.0.

Посмотреть реалную версию PowerShell можно с помощью специальной переменной $PSVersionTable:
PS C:\Root> $PSVersionTable

Name Value
— — CLRVersion 2.0.50727.4927
BuildVersion 6.1.7600.16385
PSVersion 2.0
WSManStackVersion 2.0
PSCompatibleVersions {1.0, 2.0}
SerializationVersion 1.1.0.1
PSRemotingProtocolVersion 2.1

Get-Host же возвращает лишь версию оболочки в которой запущен PS. Это может быть powerShell.exe, ISE, PSPlus, или вообще Exchange Console.
странно что нигде особо не было помпезного объявления и непонятна задержка в выпуске для других ос.
Похоже я был введен в заблуждение фактами о каталоге (v1.0, кстати ИМХО зря они так сделали, если нужна совместимость — на ntfs есть junctions — которые аналоги симлинков и проблем с совместимостью в таком случае быть не должно) и долгое отсутствии standalone релиза после RTM 7ки.
Спасибо за подробную информацию и о правильном получении версии.

Ну вы же не ждали помпезного объявления о выходе нового ServerManager например? :) PowerShell теперь компонент системы, это даёт некоторые преимущества, и некоторые обязательства :)
Отдельный релиз вобщем то не так уж и долго задержался, если релизом 7ки считать 23е октября. Почему о нём никто не орал — тоже понятно. MS не видит особой выгоды в рекламе новых возможностей для «старых» ОС :) Аналогично очень тихо прошел релиз компонентов для управления контроллерами 2003-2008 с помощью MS AD командлетов…
Что касается каталога… А зачем плодить сущности без необходимости? :) Наверное никто не предполагал что по пути к файлу будут пытаться определить его версию :)
Насчет повершелла — ждал. Про первый трубили везде и всюду. На тему релиза — давайте не путать даты, что придумывают маркетоиды и реальные даты появления в ограниченном доступе (частично-публичном) финальных версий продукта ;)

А по поводу каталога
Тогда зачем класть вторую версию шелла в каталог первой, почему на 7ке каталог от 1.0, если там отродясь 1.0 не было? Тоже не сильно логично, согласитесь :) (ведь 3 и 3.5 фреймворки отделяют друг от друга — почему же не делают такое с повершеллом)?
Давайте не путать даты, но тогда надо определится с обсуждаемым уровнем ограниченного доступа :) Или отталкиваться от публичных дат, что проще и безопаснее :)

Как ни странно еще и 2 и 3 фреймворки отделяют, хотя казалось бы CRL один и тот же :) Отделять же разные версии PS пока нет никакого смысла. 2.0 не может быть установлен одновременно с 1.0, да и не нужно это.
и немного облажался с апломбом подачи информации, sorry XaosCPS :(
Да, это именно то что я хотел сказать — я после вашего поста пошел качать дистрибы, а для семерки нету. Написано что уже входит в состав. Но я точно помню что в 7ке — первый повершелл, второго еще не было релиза тогда. Начал копать — только папка v1.0. Поковырялся — оказалось что в 1.0 папке лежит второй повершелл, и на их блоге нашел об этом комментарии. Что и написал вам ;)

PS кто-то вас невзлюбил что ли? 4 бессмысленных минуса на этих комментах было…
>> кто-то вас невзлюбил что ли? 4 бессмысленных минуса на этих комментах было

never mind
В 7 всегда был PowerShell 2.0. В 7ке RTM соответственно был RTM2.0 хотя об этом особо и не заявлялось.
а не подскажете почему у ХР и Win7 версии так отличается строка BuildVersion переменной $PSVersionTable:
ХР — 6.0.6002.18111

Win 7 — 6.1.7600.16385

Это связано только с билдом под другую ОС?
Да, именно из за этого. PS является компонентом 7ки, и соответственно наследует её 6.1. Никаких отличий в версиях самого PS насколько мне известно нет.
На самом деле хорошо что они это делают. А для тех кто шарит всегда останется возможность использовать cygwin или msys :). Ибо работать с стандартным терминалом cmd.exe — сущий ад.
А причем тут cmd.exe?
не при чем.
замечательная вещь, которую нужно было сделать ещё раньше. хотелось бы узнать как там дело со средой для набора кода, а то помнится не далеко ушли от cmd?
есть powershell ise, в котором с набором кода все в порядке (подсветка, дополнение, отладка и.т.д)
ах да, пробовал, но хотелось бы ещё больше ;)
озвучьте тогда чего не хватает в ise :-)
автокомплит неудобен, как и раньше по табу, не знаю как посмотреть список всех возможных дополнений, лучше бы в виде выпадающего списка. очень не хватает подсказок с описанием методов, типами параметров. это мешает осваивать ps.
Посмотрите в сторону PowerTab (добавляет автокомплит с меню, и интеллисенсом в стандартную консоль) или PowerShell Plus — консоль написанная с нуля специально для PowerShell, если уж там не хватит возможностей автозавершения… То расскажите что же это за возможности :)
огромное спасибо. сам не додумался поискать, ise нашёл прямо в меню старт на этом и остановился :(
Зарегистрируйтесь на Хабре , чтобы оставить комментарий

Публикации