Contents of this directory is archived and no longer updated.

Когда пользователь начинает работать с PowerShell, то со временем перед ним возникает вопрос — какой редактор (вернее сказать, среду разработки) выбрать? Решений уже достаточно много, чтобы было из чего выбирать:

  • PowerShell ISE
  • PowerGUI
  • PrimalScript
  • PowerShellPlus

в большинстве случаев выбор делают между первыми двумя продуктами. Иногда споры об этом переходят в разряд религиозных войн. Истинные фанаты PowerShell выбирают ISE. В принципе, как просто редактор он вполне неплох, т.к. уже есть в коробке (начиная с первых CTP версий PowerShell V2) и для работы с ним никаких телодвижений делать не надо. Однако с ним есть ряд трудностей:

  • IntelliSense

В ISE отсутствует IntelliSense (автозавершение команд и свойств/методов объекта). А это весьма необходимая функция в среде разработки. Мне кажется, что это поняли уже все, кроме разработчиков PowerShell ISE. Вот как это может выглядеть:

PowerGUI IntelliSense support

  • Подсказки (ToolTips)

При наведении курсора на команду, не отображаются подсказки (Tooltips). В PowerGUI это выглядит действительно классно, точь-в-точь как в Visual Studio:

PowerGUI ToolTips

Причём, на этой картинке можно нажимать на стрелочки вверх/вниз для просмотра типов данных, которые принимаются в качестве аргумента. При наведении на переменную PowerGUI показывает даже тип и содержимое переменной (в разумных пределах).

  • Multiple runspaces

В ISE включена поддержка одноврменного редактирования нескольких скриптов (за счёт табов). Однако, все табы выполняются в одном runspace, что часто приводит к негативным последствиям, когда в двух разных табах используются одинаковые имена переменных. В связи с этим, данные из определённой переменной одного таба будут мигировать во второй таб, если эта переменная ещё не определена. Это может привести к неожиданным результатам работы скрипта.

  • Кодировка сохраняемых файлов

ISE по умолчанию сохраняет файлы в Big Endian кодировке. Вроде бы ничего криминального, но... Set-Authenticodesignature не умеет подписывать скрипты в Big Endian кодировке! Поэтому вы не сможете подписать штатными средствами ни один скрипт, который был сохранён в ISE! Для этого нужно прибегать к грязным хакам. Т.е. использовать такую строку, которая переопределит кодировку, в которой скрипт будет сохранён:

$psISE.CurrentFile.Save([Text.Encoding]::UTF8)
  • Исполнение сохранённых скриптов и Execution Policy

Вы можете в нём исполнять свой сценарий до тех пор, пока не сохраните его в файл. А вот когда вы редактируете уже сохранённый скрипт, то получаете бонус в виде того, что скрипт не будет исполняться внутри ISE, если у вас политика исполнения скриптов выставлена в AllSigned. ISE об этом честно предупреждает:

The script you are about to run will be saved 
Т.е. он сохраняет файл и пытается его запустить. В PowerGUI сделано куда более гуманно. Из основного редактора код условно копируется и вставляется в консоль PowerShell. Т.е. вы можете спокойно редактировать и отлаживать свой скрипт и только когда он будет готов к работе — подписывать скрипт. В случае с ISE вам придётся либо после каждого изменения сохранять и переподписывать скрипт (а это дико неудобно), либо выделять весь код и выбирать Run Selection. А это тоже не очень удобно. Плюс, сохранение скрипта перед исполнением ведёт к другой проблеме. Вы не сможете отменить изменения на более раннее состояние.

  • Поддержка профиля $Profile

В ISE вы не можете использовать свой профиль (который в консоли содержится в переменной $Profile), а только поддерживать дополнительный профиль, который находится в той же папке, что и основной, но под именем Microsoft.PowerShellISE_profile.ps1

  • Отслеживание изменений в файле

ISE не поддерживает проверку файла на изменения, хотя это должно быть удобно. Я часто редактирую свои файлы дома на нотебуке и на работе. Папка со скриптами синхронизируется между домом и работой через Live Sync. Я достаточно редко закрываю редактор, поэтому вечером сохраняю файл (который уже открыт в редакторе на работе) и всё. Утром, придя на работу я могу без переоткрытия файла могу продолжать его редактировать. PowerGUI просто сообщит, что файл был изменён и сам предложит загрузить последнюю сохранённую версию. С ISE придётся вручную переоткрывать файл.

  • About

Я не могу вспомнить программ, которые бы имели меню Help, но внутри не имели подменю About. но это просто мелочи уже, которые не влияют на удобство разработки скриптов.


Updated 04.10.2009

Если подвести это всё в табличку, то получится примерно так:

  PowerShell ISE PowerGUI PowerShell Plus
Built-In :yes: :no: :no:
Is free :yes: :yes: :no:
Fast start :no: :no: :no:
Powershell Support 100% <100% <100%
External PowerShell window :yes: :yes: :yes:
Remote PowerShell tab :yes: :no: :no:
IntelliSense :no: :yes: :yes:
Multiple Runspaces :yes: :yes: :no:
ToolTips :no: :yes: :yes:
Syntax highlighting :yes: :yes: :yes:
Error syntax highlighting :no: :yes: :yes:
Error autocorrection :no: :no: :yes:
Changed lines highlighting :no: :yes: :yes:
Outline support :no: :yes: :yes:
Support for signing :no: :yes: :yes:
Can sign within IDE :no: :no: :yes:
Run signed scripts in external window :yes: :no: :yes:
Readable command help :yes: :yes: :yes:
Configurable editor panes :yes: :yes: :yes:
Variable pane :no: :yes: :yes:
PS $Profile support :no: :yes: :yes:
BreakPoints :yes: :yes: :yes:
Code templates :no: :yes: :yes:
Print from editor :no: :yes: :yes:
Script autosave :no: :yes: :yes:

Примечание: последнее изменение таблицы 16.03.2010

Вобщем, я обозначил те вещи, которые я хотел бы видеть в хорошем редакторе. И значительное большинство моих хотелок уже есть в PowerGUI. О достоинствах PowerGUI можно говорить сколько угодно, но не буду смущать Диму Сотникова, поэтому скажу, что их продукт очень крутой. Но, в то же время, есть к чему стремиться. :-)

Однако, хочу ещё раз напомнить, что PowerGUI никогда не закроет первую строчку в таблице, что для религиозных фанатиков будет самым главным преимуществом и, который, затмит остальные недостатки ISE. Но мой выбор в этом вопросе достаточно очевиден.


Share this article:

Comments:

artem

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

artem

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

Vadims Podāns

На счёт реверсинженеринга — вопрос риторический. Поскольку даже в том же PowerGUI достаточно трудно смоделировать ситуацию, когда он будет работать как-то иначе, чем родная консоль или ISE. Во всяком случае мне на ум ничего похожего не приходит. Т.е. говорить о том, что более фулл или менее здесь не получится, поскольку разница там минимальная, хотя у ISE в теории есть преимущество (но пока для меня не очевидное). Что касается профилей, то это может быть ключевым моментом, когда часть кода будет использоваться из профиля. Скажем, тот-же Send-SMTPmail. В ISE не получится проверить сразу правильность взаимодействия скрипта с каким-то кодом из профиля. Тот факт, что разработчики чего-то не захотели — это их личные половые трудности, которые конечных потребителей волновать не должны. Я думаю, что они просто решили взять тем, что ISE встроен и поэтому он будет религиозно православен, а на остальное можно и забить. Как бы сейчас в PowerShell ньюсгруппе идёт срач на тему кодировок ISE, что PowerShell его потом сам подписать не может. Вот вам и родной продукт. Это тоже было осознанным выбором разработчиков?

Vadims Podāns

Я не могу пока говорить об остальных редакторах, т.к. не использую их. Плюс, некоторые из них платные (PowerShell Plus и PrimalScript). Даже если проверить ещё несколько редакторов из той же ценовой категории, то на это уйдёт немало времени, чтобы оценить их работу. Я делал несколько попыток заставить себя полюбить ISE. Не получилось. Хорошо, хоть детей не осталось :)

artem

что касается профилей — я, наоборот, имел в виду следующее. Что если бы разработчикам было бы глубоко похуй — они либо не сделали бы поддержку профилей вообще, либо брали бы дефолтный профиль, которым пользуется сам пош. Тот факт, что они сделали для исе аж целый свой отдельный профиль, говорит о том, что для этого были какие-то особые резоны. Т.е. они закладывались на ситуации, когда тебе удобнее было бы использовать именно разные профили, а не одинаковый. Поэтому прежде, чем судить, плюс это или минус, мне кажется, что стоит понять — ради чего это, собственно, затевалось. А потом уже решать — имеют для тебя смысл эти резоны или нет.

Vadims Podāns

Ну хорошо, тогда объясни смысл наличия отдельного профиля для ISE? Единственное для чего он нужен - это настройка самого ISE из этого профиля. Можно использовать особую переменную $psISE, которая может всячески его настраивать, но вне пределов ISE этот профиль уже теряет всякий смысл.

xaegr.livejournal.com

Сорри, читал мельком, в основном таблицу :) Multiple Runspaces – в ISE есть. File\New PowerShell Tab Syntax Highlighting – PowerGUI до сих пор использует свой самописный парсер для подсветки и прочего? Тогда запиши плюс в сторону ISE – он использует PowerShellовский. В самописном могут быть ошибки, иногда неприкольные (не теория, а практика, я находил в свое время, и наверняка есть еще). Да и Full PowerShell support тогда отсутствует у ISE :) Outline support – что это? PS Profile support – ISE использует профили 100% соответственно гайдлайнам. AllUsersAllHosts : C:\Windows\System32\WindowsPowerShell\v1.0\profile.ps1 AllUsersCurrentHost : C:\Windows\System32\WindowsPowerShell\v1.0\Microsoft.PowerShellISE_profile.ps1 CurrentUserAllHosts : C:\Users\Xaegr\Documents\WindowsPowerShell\profile.ps1 CurrentUserCurrentHost : C:\Users\Xaegr\Documents\WindowsPowerShell\Microsoft.PowerShellISE_profile.ps1 Если у PG не так – то проблема именно у него. И где расширябельность, объектная модель, управление из PS? :) ---- >а все остальные редакторы вынуждены его реверс-инжинирить, что, безусловно, уже совсем не тру Не вынуждены, парсер начиная с 2.0 доступен даже в скриптах. >было бы намного полезнее и интереснее, если бы ты занёс в неё все четыре (или сколько их там?) основных популярных редактора +100 >Поскольку даже в том же PowerGUI достаточно трудно смоделировать ситуацию, когда он будет работать как-то иначе, чем родная консоль или ISE. Было и не мало. То что я находил правда уже пофиксили, но я давно не искал. Причем вещи обычно были элементарные, а не мегакод :)

xaegr.livejournal.com

>Да и Full PowerShell support тогда отсутствует у ISE :) Имел ввиду PowerGUI ;)

Vadims Podāns

> Multiple Runspaces – в ISE есть. File\New PowerShell Tab И какой мудак его так назвал? По смыслу это то же самое, что и новый таб. Никакой привязки к ранспейсу в названии нет. Ок, по этому пункту исправлю. > PowerGUI до сих пор использует свой самописный парсер для подсветки и прочего? и что? Подсветка сама есть? Есть. Как она реализована — мне уже всё равно. Мне важен конечный результат. > Outline support – что это? это прикольная штука, которая есть в Visual Studio, когда блоки кода можно сворачивать и разворачивать. Очень полезная вещь. Во всяком случае для меня. > CurrentUserAllHosts : C:\Users\Xaegr\Documents\WindowsPowerShell\profile.ps1 это очень сомнительно, потому что ISE ничего не может запустить из того, что определено в моём профиле. > Если у PG не так – то проблема именно у него. Тут получается как раз проблема у ISE, что он не тянет мой CurrentUserAllHosts. Почему — не знаю. > И где расширябельность, объектная модель, управление из PS? :) расширябельность — знаю. Но профит, наверное, сомнительный. > Было и не мало. То что я находил правда уже пофиксили, но я давно не искал. Причем вещи обычно были элементарные, а не мегакод я сам находил. Это вполне стандартная ситуация для неродных продуктов. И факт, что PowerGUI на 1-2% хуже поддерживает PS достаточно незначителен в большинстве случаев.

artem

> это прикольная штука, которая есть в Visual Studio, когда блоки кода можно сворачивать и разворачивать. Очень полезная вещь. Во всяком случае для меня. двачую полезную вещь. Причём помню, что Холм пиарил прималскрипт (правда, когда речь шла ещё про вбс) именно ради этой фичи. И я даже-таки скачал этот прималскипт и собирался его попробовать — но лень. Собственно, именно это и подтолкнуло меня к идее того, что было бы сильно неплохо, если бы кто-то свёл в одну табличку профиты всех редакторов. > расширябельность — знаю. Но профит, наверное, сомнительный. ну раз знаешь — то, наверное, всё равно надо добавить в табличку. Ибо это для тебя — сомнительный, а для кого-то может оказаться делом первостепенной государственной важности. > И факт, что PowerGUI на 1-2% хуже поддерживает PS достаточно незначителен в большинстве случаев. тогда в третьей строчке галка у PowerGUI должна быть на 1-2% менее зелёной, чем у ISE. А если серьёзно — то это очень существенный момент для меня как для нуба. Это вам — с парсером в голове — хорошо. Вам и редактор нужен больше для удобства. И если он ВНЕЗАПНО начнёт вас наёбывать — вы это дело рано или поздно пропалите, разберётесь как следует и даже нажалуетесь разрабам. А нуб редактору верит на слово, иначе зачем он вообще нужен? (Редактор, а не нуб). И если редактор говорит, что должно работать, а на самом деле не работает (или, наоборот) — нуба переклинит, я гарантирую это. Ибо получится, что он сначала будет часами долбиться головой в закрытую дверь с надписью «на себя». А потом с большой вероятностью выкинет нахуй либо этот язык вообще, либо этот редактор в частности.

Vadims Podāns

добавил PowerShell Plus.

Comments are closed.