Как вы используете PowerShell?

Windows PowerShell вышла в прошлом году и получила отличные отзывы от многих блоггеров .net ( вспоминается Гензельман ). Казалось, ее рекламировали как отличную новую утилиту, которая каким-то образом упростила все, что вы когда-либо делали в командной строке, и интегрировала с .Net. Однако чем больше я читаю об этом, тем больше мне кажется, что это инструмент, который отлично подходит для ИТ-специалистов и мало пригоден для разработчиков.

Вы используете PowerShell в своей разработке? Если да, то как? Стоит ли учиться?

Примечание. После просмотра ответов я думаю, можно сделать вывод, что PowerShell может быть очень полезен для разработчика .Net. Однако, нет ни одного ответа ниже , что я могу маркировать , как в ответ (так что, пожалуйста , простите меня за не делать этого). Я голосую за каждый ответ, который считаю полезным.

Ответов (14)

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

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

Я использую его для запуска нескольких процессов и для некоторых вещей, которые cmd не может сделать.

Хотя я еще не научился полностью использовать его, я фанат, потому что он поддерживает большинство (если не все) команд Unix, с которыми я знаком для навигации с использованием командной строки. Если у вас есть опыт работы с * nix и вы разрабатываете в Windows, я бы рекомендовал использовать его для этого просто потому, что вам нужно запомнить только один набор команд.

Однако относитесь к тому, что я говорю, с недоверием. Когда дело доходит до сборки и компиляции, я использую функции командной строки.

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

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

Он никогда не использовался как часть моей роли разработчика, но время от времени я получаю задачу, которую я бы написал небольшую программу для автоматизации, которую я теперь заставляю выполнять в PowerShell, и это занимает меньше времени.

Например, я недавно переместил сотни тысяч файлов с одного сервера на другой с помощью xcopy и забыл установить атрибут для сохранения дат создания файлов. Powershell спешит на помощь. В течение десяти минут у меня был написан и протестирован сценарий, который копировал даты создания без необходимости повторного копирования файлов.

Определенно стоит научиться. Вы когда-нибудь конвертировали текст? Вы когда-нибудь манипулировали XML? Вы когда-нибудь что-нибудь автоматизируете? Простой пример. Кто-то дает вам файл с разделителями-запятыми, и вам нужно вытащить из него некоторые поля, чтобы импортировать их в какой-либо другой инструмент / базу данных или создать некоторый список для вашей программы.

Если csv содержит имена полей в первой строке файла, вы можете сделать следующее в Powershell:

$Data = import-csv "something.csv" 

Затем вы можете ссылаться на свои данные, используя имена полей. Если бы у вас было поле под названием SSN, вы могли бы сказать $ Data [n] .SSN. Вы также можете просто передать команду import-csv тому, что обрабатывает данные, включая экспорт в XML / html или что-нибудь еще, с помощью всего нескольких команд. Powershell полон подобных вещей.

Это инструмент, который дает вам потрясающий доступ к множеству вещей на вашей рабочей станции и серверах, включая полную библиотеку .NET. Это инструмент, не предназначенный для определенного типа людей. Может быть, просто администраторы быстро осознали, насколько это полезно. Я использую это каждый день.

Чтобы ответить на заданный вопрос, я использую его для автоматизации повседневных дел. Я пытаюсь сделать его своим единственным языком сценариев, заменяя то, что я делал в perl, python, vbscript, .bat / .cmd, и одну небольшую служебную программу / программу преобразования, которую я бы создал.

Я только что закончил версию 1 проекта, в котором размещалась среда выполнения PowerShell для выполнения задач в удаленных системах. Я полностью не согласен с тем, что PowerShell - это не инструмент для разработчиков.

Как продукт на основе .NET, он является прямым аналогом программирования .NET. На PS можно создавать прототипы целых .NET-программ, а также небольших строк для проверки функциональности методов и т. Д. То, что языковые архитекторы для PS специально разработали синтаксис PS, близкий к C#, означает, что при написании сценариев PS и кода C# очень мало переключений контекста (что-то, что мне приходилось делать в последнее время). Вы опираетесь на свои знания, уже с трудом завоеванные с языками .NET, используя PS.

Как инструмент автоматизации он превосходен. Он изначально имеет доступ к WMI, ADO, ADSI, .NET, COM, а также может быть сварен точечной сваркой для работы с чем-либо еще. Уже одно это делает любую автоматизацию Windows проще и мощнее. Доступ к системе сопровождается некоторыми другими языками (VBscript, Python), но простота использования языка и преимущества .NET framework означает, что некоторые сценарии PS связывают существующий код (повторное использование кода) вместо тратить свое время на написание еще одной процедуры архивирования файлов (например ...)

Уже есть проекты, которые создают инструменты сборки (на ум приходит psake), чтобы облегчить жизнь разработчикам. Такие проекты, как Powershell Community Extensions, демонстрируют мощные возможности расширений, которых могут достичь обычные повседневные разработчики. Я согласен с некоторыми из приведенных выше плакатов, я считаю, что все, что сделано для настройки среды сборки или работы с данными для задач разработки, может быть выполнено с помощью PS, если не быстрее / проще / лучше, но так же хорошо.

Джеймс

Мне кажется, что WPS - это способ облегчить вашу жизнь, делая то, что вам нужно. Я не думаю, что вы найдете WPS, интегрированный, скажем, в FireFox или Quicken, но эти команды могут использовать его для этих целей ... короче говоря, «WPS не делает вашу программу, WPS упрощает ее». ; о)

Я админ по профессии и только начинаю заниматься разработкой, но я вижу, что PowerShell может быть очень полезен разработчикам во многих отношениях.

  1. Автоматизация задач -> Ли Холмс (разработчик из группы PowerShell) опубликовал экспериментальную версию под названием BgShell, которая в основном представляла собой среду выполнения PowerShell, размещенную в приложении Windows Forms, которое отслеживало нажатия клавиш и запускало действия, написанные в PowerShell на их основе. . Он также включал автоматизацию буфера обмена.
  2. Быстрый доступ к платформе .NET. Вам не нужно компилировать и запускать что-то или использовать другую программу, например Snippet Compiler, для проверки некоторых функций. Загрузите сборку в сеанс PowerShell и взаимодействуйте с ней. Вы получаете все возможности для обнаружения PowerShell (например, Get-Member) для исследования своего объекта.
  3. Легко создавать предметно-ориентированные языки. Джеймс Ковач написал на PowerShell простой язык сценариев сборки под названием Psake.
  4. Он может предоставить язык сценариев для вашего приложения. Поскольку PowerShell является частью 09 Common Engineering Criteria, многие приложения Microsoft будут иметь интерфейсы для PowerShell, и знакомство с синтаксисом языка будет расти. Вы можете использовать эти знания, встраивая среду выполнения PowerShell в свое приложение и предоставляя пользователям интерфейс сценариев, выбирая, к каким объектам они будут иметь доступ.
  5. В том же духе, если вам нужно создать интерфейс командной строки для вашего приложения, PowerShell предоставляет большую часть базовой инфраструктуры, необходимой для анализа аргументов и других основных задач, оставляя вам только бизнес-логику для написания и предоставляя согласованный интерфейс с другими приложениями (например, если у вас есть учетные записи пользователей, которыми необходимо управлять (которые еще не интегрированы с Active Directory, администратор может (с помощью командлетов Quest AD и интерфейса ваших приложений) Get-QADUser | New -MyApplicationUser и готово. Команда Exchange 2007 сделала это очень хорошо. Вся функциональность основана на командлетах PowerShell, графический интерфейс вызывает командлеты и показывает пользователю, что выполняется, поэтому они могут создавать сценарии на их основе.
  6. Это просто круто! Примерно в 250 строках (включая комментарии) Роб Фауст и Джефф Хикс написали сетевой сниффер в PowerShell. Легче использовать, чем WinDump, для облегчения поиска и устранения неисправностей.
  7. Сообщество - вокруг PowerShell существует большое сообщество, включая разработчиков. Узнайте больше на PowerShellCommunity.org.

@EdSwangren - Если вам нужно работать в основном на платформе Windows и работать в пространстве .NET, я искренне рекомендую потратить время на изучение PowerShell. Он может использовать ваш существующий опыт и код .NET, работает с COM, WMI и ADSI. Он позволяет получить доступ практически ко всему на платформе Windows (и это только V1). Версия 2 находится в активной разработке (сейчас доступна CTP2) и будет включать больше удаленного взаимодействия, потоковую передачу STA и многие другие улучшения.

Многие поставщики также поддерживают PowerShell - от / n Software, предоставляющего сетевые командлеты, до Citrix и VMWare, предоставляющих API управления через PowerShell.

Вы можете ненавидеть Powershell, но он все равно может быть вам невероятно полезен. Я использую его для небольших, но важных однострочных вещей или в очень второстепенных скриптах. Он действительно не может сравниться с C#, поэтому, как только возникает какая-либо сложность или значительный потенциал повторного использования, я переключаюсь на C#. Кроме того, что немаловажно, Powershell настолько забавен, что я ХОЧУ каждый раз воссоздавать решения с нуля, иначе я забываю о причудах, которых много. Я слышал, как это говорят и другие люди!

Примеры того, для чего это действительно хорошо:

  1. Специальная обработка текста. Иногда люди передают мне большие данные или файл SQL и хотят, чтобы они преобразовали его в другую форму, иногда очень сложными способами. Одно это сэкономило мне невероятное количество времени. Он часто включает в себя множество специальных однострочных и промежуточных файлов. Теперь, когда люди знают, что я могу это сделать, они, как правило, передают такие проекты мне. А в некоторых случаях они настолько поражены, что изучают Powershell самостоятельно.

  2. Когда я нахожусь на объекте клиента и мне отчаянно нужно что-то автоматизировать, и это единственный инструмент, который я могу и / или могу получить в свои руки.

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

  4. Однострочные файлы и проекты для копирования, поиска и замены.

  5. Небольшие скрипты для сборки на случай необычных сложностей.

  6. И т.д. У вас обязательно будут небольшие причуды в вашей системе, когда вам нужно остановить / запустить службу, чтобы исправить что-то еще, или что-то еще.

Я использую его, чтобы автоматизировать как можно больше вещей. Одним из примеров является автоматизация веб-интерфейса для упрощения разработки / тестирования приложений.

Я также использую его для генерации случайных входных файлов для различных программ. Например, одно приложение ожидает XML-файл, и у меня есть сценарий для создания этого файла со случайными значениями и уникальным идентификатором на основе текущего времени.

Я не использую сильно, но использую каждый день.

Я использую PoSH для любой «повторяющейся» работы, которую я выполняю для администрирования сетей, доменов, компьютеров, пользователей AD, редактирования текста, поиска файлов, миграции файловых серверов, мониторинга, а также для удовольствия!