Как предоставить функциональность PowerShell из вашего приложения - PullRequest
6 голосов
/ 20 мая 2009

Я слушал подкаст о PowerShell 2.0 , который Скотт Хансельман сделал . В этом эпизоде ​​они говорили о возможностях расширения вашего приложения для предоставления функциональности для PowerShell.

Теперь это звучит интересно. Кто-нибудь из вас делал такие расширения, которые раскрывают функциональность вашего приложения? Если да, то что за функциональность?

EDIT: Если быть более точным: я не заинтересован в размещении PowerShell в своем приложении. Меня больше интересует открытие моего приложения с интерфейсом, похожим на API. Таким образом, поставщик PowerShell, по-видимому, является технологией, которую я ищу для более глубокого понимания.

Ответы [ 3 ]

4 голосов
/ 20 мая 2009

Существует несколько способов использования PowerShell в пользовательских приложениях. Прелесть механизма автоматизации PowerShell в том, что вам не нужно иметь дело с параметрами, форматированием вывода и множеством других вещей PITA, с которыми вам придется справиться самостоятельно. Чтобы бросить объект по конвейеру в PowerShell, вы переопределяете метод ProcessRecord и вызываете WriteObject

protected override void ProcessRecord()
{
  // Get the current processes
  Process[] processes = Process.GetProcesses();

  // Write the processes to the pipeline making them available
  // to the next cmdlet. The second parameter of this call tells 
  // PowerShell to enumerate the array, and send one process at a 
  // time to the pipeline.
  WriteObject(processes, true);
}

Вы можете написать командлеты, которые позволяют администратору автоматизировать серверную часть приложения. Командлеты всегда являются функциональными единицами на основе задач с соглашением об именах глаголов. Например, Get-Process или Restart-Service. Командлеты делают одну вещь и делают это очень хорошо. Сочетание командлетов дает невероятные возможности.

Кроме того, если ваше приложение имеет какое-то хранилище данных, также можно написать провайдера, который позволил бы кому-то просматривать и / или управлять хранилищем данных с помощью cmds, таких как cd (set-location) и md (new-item). ). Поставщик - это то, что написала команда PS, чтобы вы могли перейти в реестр с помощью cd hklm: или в хранилище сертификатов с помощью cd cert:

Вы также можете разместить сам PowerShell в своем приложении.

На MSDN имеется некоторая полезная информация обо всех этих опциях

Учитывая интерес к поставщикам, вот несколько примеров , как создать поставщика PowerShell.

Было несколько обсуждений о дизайне и использовании набора командлетов или о предоставлении чего-либо с провайдером. При реализации поставщика вы также получаете несколько командлетов, таких как Get-item, New-item, Get-Location, Set-Location. Однако я обнаружил, что наличие некоторых командлетов для конкретных задач в дополнение к поставщику может быть очень полезным.

2 голосов
/ 22 мая 2009

Существует несколько уровней поддержки PowerShell, и мало кто это объясняет.

  1. .NET классы. Да, PowerShell может получить доступ ко всему, что связано с .NET API, без каких-либо дополнительных действий! Но вы получаете не все дополнительные функции PowerShell. Наименьший объем работы.
  2. Модуль PowerShell с командлетами, сценариями и / или функциями. Это потребует написания некоторого специального кода PowerShell, чтобы обернуть вокруг существующего API. Если вы пойдете по этому пути, вам следует сесть и изучить лучшие практики проектирования PowerShell и продумать вашу поддержку PowerShell. Чтобы сделать это правильно, требуется больше работы.
  3. Поставщики PowerShell. Провайдеры - это особый случай, не у всех должен быть провайдер. Вы должны действительно подумать, действительно ли ваша информация имеет смысл в представлении файловой системы.

Это не относится к вашему вопросу, но я добавлю его для полноты.

  1. Размещенный PowerShell. Вы можете разместить код PowerShell в своем приложении или получить доступ к функциональности PowerShell из своего приложения. Это имеет смысл в некоторых ситуациях, но также является специализированным случаем поддержки PowerShell.
2 голосов
/ 20 мая 2009

Вот хорошая книга по этой стороне PowerShell (которая не получает большого освещения в большинстве книг).

Профессиональное программирование Poweshell

Используя эту книгу (и некоторые поездки в msdn), я смог настроить и запустить собственный сервер PowerShell за день. Несколько дней спустя у меня были пользовательские командлеты, которые взаимодействуют с графическим интерфейсом (для создания древовидных структур, сеток, диаграмм, меню и т. Д.)

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