Чем хорош PowerShell? - PullRequest
       4

Чем хорош PowerShell?

13 голосов
/ 09 февраля 2011

Я компетентный программист на C # и новичок в PowerShell. Для чего это? Это больше инструмент программиста или администратора?

Пожалуйста, поделитесь своим опытом. Когда было бы легче написать сценарий с использованием сборок .NET, чем инструмент C #? Для каких реальных производственных задач вы его используете?

Может быть, вопрос должен звучать так: что это хорошо для по сравнению с C #, а не пакетно ?

Ответы [ 7 ]

7 голосов
/ 09 февраля 2011

Когда было бы проще написать сценарий с использованием сборок .NET, чем инструмент C #?

А, вот и все.PowerShell устраняет разрыв между пакетными файлами и миром .NET.PowerShell отвечает на вопрос: «Что если бы вы написали новый командный интерпретатор, который имел бы всю мощь .NET, был бы полностью динамичным и имел в значительной степени то, что люди хотят в командной оболочке?»

Итак, когда вы используете PowerShell поверх C #?Это намного удобнее для небольших приложений, которые интегрируют или управляют другими приложениями - это удобнее, потому что вам не нужно его компилировать, и у него уже есть стандартный способ передачи данных другим скриптам и скриптлетам, что легколюди (которые знают PowerShell), чтобы понять.

7 голосов
/ 09 февраля 2011

Я разработчик на C # и использую PowerShell с бета-дней, когда он еще назывался Monad. Я также много занимался разработкой под UNIX, включая автоматизацию / создание сценариев с Korn Shell. Для меня PowerShell был находкой, потому что я устал от несоответствия импеданса Korn Shell с Windows. Например, указание общего сетевого пути было особенно брутто "\\\\\\server\\\\share" IIRC. Это была игра в угадывание того, сколько раз вы избежали обратной косой черты, в зависимости от того, сколько раз оценивается строка.

Я использую PowerShell для многих задач автоматизации, таких как:

  • Просмотр большого исходного каталога, в котором я хочу искать содержимое файлов CSPROJ.
  • Однажды я изменил 260+ файлов VCPROJ с помощью скрипта PowerShell.
  • В другой раз мне пришлось создать кучу новых проектов на C #, каждый из которых должен был настраивать достаточное количество свойств проекта, включая множество настроек Code Analysis. Я написал скрипт, чтобы взять стандартный файл проекта C # и сделать все настройки для меня. Это сэкономило мне много времени и, что более важно, избавило меня от множества ошибок и / или забывчивости установки определенных настроек
  • Запросы TFS (с использованием командлета TFPT PowerShell), такие как поиск последних наборов изменений с определенным словом в комментарии о регистрации.
  • Удаление всех временных файлов (bin / obj dirs, suo files и т. Д.) В определенной иерархии папок.

Чтобы заменить пользовательские утилиты командной строки:

Вы можете использовать PowerShell как отличный способ заменить все те маленькие утилиты командной строки, которые вы использовали для написания. Думать об этом. PowerShell - это достаточно мощный скриптовый язык, который дает вам доступ к большей части .NET Framework. Он особенно хорош при разборе параметров, то есть имеет встроенный механизм разбора параметров, который дает вам: именованные параметры, позиционные параметры, необязательные параметры, параметры переключателей, параметры привязки к конвейеру, проверку параметров и многое другое. Теперь рассмотрим, сколько кода в вашей типичной утилите командной строки выделено для разбора параметров по сравнению с реальной функциональностью. Я почти прекратил писать утилиты командной строки (если они не особенно сложны - тогда вы не можете победить VS отладчик). И я позволил PowerShell обрабатывать все параметры для меня. А с PowerShell 2.0 чрезвычайно легко добавить документацию / использование в вашу утилиту, просто украсив ваш скрипт некоторыми должным образом отформатированными комментариями.

Я также использую PowerShell в качестве .NET REPL :

  • Устраняет необходимость создания ConsoleApplication59 только для того, чтобы посмотреть, что делает строка форматирования, например, Я просто захожу в приглашение PowerShell и пробую что-то вроде "{0,20:F1}" -f 41.22.

Вы также можете легко использовать механизм PowerShell в своем собственном приложении C #. Это удобно, если вы предоставляете своим конечным пользователям функции, которые вы хотели бы сделать командной строкой пригодной для сценариев. Вы можете написать эти функции в виде командлета PowerShell (в C #). Затем эти командлеты можно использовать непосредственно из командной строки, и если вы разместите PowerShell в своем приложении с графическим интерфейсом, вы сможете получить доступ к тому же набору кода, например ::

    private bool VerifyPowerShellScriptSignature(string path)
    {
        using (var runspaceInvoker = new RunspaceInvoke())
        {
            Collection<PSObject> results =
                runspaceInvoker.Invoke("Get-AuthenticodeSignature " + path);
            Signature signature = results[0].BaseObject as Signature;
            return signature == null ? false : 
                                (signature.Status == SignatureStatus.Valid);
        }
    }
6 голосов
/ 09 февраля 2011

Для написания инструмента на C # вам обычно нужно настроить проект Visual Studio (или проект в другой IDE).Если вы делаете это «вручную», вам нужен как минимум скрипт сборки для запуска компилятора C #.Если для конкретной задачи это кажется слишком трудоемким и вам нужно просто простое решение «один файл-источник-программа-все-в-одном», сценарий PowerShell может быть лучшей альтернативой.

Некоторые возможные причины:

  • На вашей машине не установлена ​​Visual Studio (или любая другая C # IDE), или вы к ней совсем не привыкли (как многие системные администраторы)
  • Программа настолько мала, что вам не нужен отладчик.Некоторые простые консольные выходы сделают это.
  • Вы не хотите поддерживать более одного файла.
  • Вы не хотите помещать параметры конфигурации для своего инструмента в отдельный файл конфигурации.
  • Когда вы можете определить отдельные задачи, но не можете определить точный рабочий процесс, идеально подходит сочетание скрипта и C #.Создание командлетов или поставщиков в C # дает вашим сценариям общий доступ ко всему, и PowerShell становится связующим звеном, делая рабочий процесс гибким в новых ситуациях.
  • У вас есть несколько конкурирующих общих идей дизайна, и вы хотите быстро протестироватьвозможности для осуществимости.Мягкая типизация и конвейерная архитектура PowerShell позволяют легко игнорировать многие капризы структуры управления и деталей типов и проникнуть в суть алгоритма.
2 голосов
/ 09 февраля 2011

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

В основном я использую его для частей моей сборки и настройки автоматизации.Причина, по которой я предпочитаю PowerShell, заключается в том, что моим сценариям почти всегда требуется какой-либо файл DLL из Visual Studio.

Теперь, если это приложение на C #, когда выходит новая версия Visual Studio, мне нужно перекомпилировать с использованиемновые ссылки, а затем публиковать их везде, где это необходимо.

Однако, если это PowerShell, я могу просто изменить путь к файлу DLL в сценарии, и все в порядке.Кроме того, мне гораздо проще работать с парсингом файлов и другими типами Perl-ish.

2 голосов
/ 09 февраля 2011

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

Также проще создавать тестыдля проектов на C # по сравнению с PowerShell, поскольку C # является первоклассным гражданином в Visual Studio, а PowerShell - нет.

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

2 голосов
/ 09 февраля 2011

Это немного больше, чем инструмент системного администратора, но только немного.

Места, в которых я бы предпочел PowerShell, скажем, C #:

  • Где угоднозапускать внешнее приложение
  • везде, где вы хотите иметь дело с API автоматизации ...
  • везде, где вы манипулируете файлами

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

Обратите внимание, что NuGet использует PowerShell для автоматизации добавления / удаления пакетов в ваше решение.(И в этом процессе вам предоставляется консоль PowerShell для автоматизации Visual Studio.)

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

2 голосов
/ 09 февраля 2011

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

Например, последние версии серверных продуктов Microsoftнапример, SQL Server, Exchange, SharePoint и т. д. предоставляют богатый набор API-интерфейсов, которые можно легко использовать с PowerShell, в этом свете с PowerShell вы можете, например:

  • присоединять, отсоединять, резервировать,восстановить базу данных в SQL Server;
  • манипулировать почтовыми ящиками Exchange;
  • и многое другое.

Все, что вы не могли сделать раньше, просто из пакетного файла.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...