Подтвердить что ты не робот

Чем хорош PowerShell?

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

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

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

4b9b3361

Ответ 1

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

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

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

Ответ 2

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

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

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

Ответ 3

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

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

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

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

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

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

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

Вы также можете легко воспользоваться хостом PowerShell в своем собственном приложении С#. Это удобно, если вы предоставляете своим конечным пользователям возможности, которые вы хотели бы сделать сценарием командной строки. Вы можете написать эти функции как командлет PowerShell (в С#). Затем эти командлеты можно использовать непосредственно из командной строки, и если вы размещаете 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);
        }
    }

Ответ 4

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

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

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

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

Ответ 5

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

Я бы выбрал PowerShell, скажем, на С#:

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

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

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

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

Ответ 6

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

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

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

Ответ 7

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

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

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

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