Прочитать на английском

Поделиться через


Общие сведения о командлетах

Командлет — это упрощенная команда, используемая в среде PowerShell. Среда выполнения PowerShell вызывает эти командлеты в контексте скриптов автоматизации, предоставленных в командной строке. Среда выполнения PowerShell также вызывает их программно с помощью API-интерфейсов PowerShell.

Командлеты

Командлеты выполняют действие и обычно возвращают объект Microsoft .NET в следующую команду в конвейере. Командлет — это одна команда, которая участвует в семантике конвейера PowerShell. Сюда входят двоичные командлеты (C#), расширенные функции скриптов, CDXML и рабочие процессы.

В этой документации по пакету SDK описывается создание двоичных командлетов, написанных на языке C#. Дополнительные сведения о командлетах на основе сценариев см. в следующих статьях:

Чтобы создать двоичный командлет, необходимо реализовать класс командлета, производный от одного из двух специализированных базовых классов командлетов. Производный класс должен:

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

Сборку, содержащую класс, можно загрузить напрямую с помощью командлета Import-Module . также можно создать ведущее приложение, которое загружает сборку с помощью API System. Management. Automation. пространства выполнения. Initialsessionstate. Оба метода предоставляют программный и доступ командной строки к функциональности командлета.

Условия для командлетов

В документации по командлету PowerShell часто используются следующие термины:

Атрибут командлета

Атрибут .NET, используемый для объявления класса командлета в качестве командлета. Хотя PowerShell использует несколько других атрибутов, которые являются необязательными, атрибут командлета является обязательным. Дополнительные сведения об этом атрибуте см. в разделе объявление атрибута командлета.

Параметр командлета

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

Набор параметров

Группа параметров, которые можно использовать в одной команде для выполнения определенного действия. Командлет может иметь несколько наборов параметров, но каждый набор параметров должен иметь по крайней мере один уникальный параметр. Хорошая разработка командлетов настоятельно предполагает, что уникальный параметр также является обязательным параметром. Дополнительные сведения о наборах параметров см. в разделе наборы параметров командлета.

Динамический параметр

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

Методы обработки входных данных

Класс System. Management. Automation. командлет предоставляет следующие виртуальные методы, используемые для обработки записей. Все производные классы командлетов должны переопределять один или несколько первых трех методов:

Дополнительные сведения об этих методах см. в разделе методы обработки входных данных командлета.

При реализации командлета необходимо переопределить хотя бы один из этих методов обработки ввода. Как правило, метод ProcessRecord () является переопределяемым методом, поскольку он вызывается для каждой записи, обрабатываемой командлетом. В отличие от этого, метод BeginProcessing () и метод EndProcessing () вызываются один раз для выполнения предварительной обработки или последующей обработки записей. Дополнительные сведения об этих методах см. в разделе методы обработки входных данных.

Функция ShouldProcess

PowerShell позволяет создавать командлеты, предлагающие пользователю отправить отзыв, прежде чем командлет вносит изменения в систему. Чтобы использовать эту функцию, командлет должен объявить, что он поддерживает эту ShouldProcess функцию при объявлении атрибута командлета, и командлет должен вызвать методы System. Management. Automation. командлет. ShouldProcess и System. Management. Automation. командлет. ShouldContinue из метода обработки ввода. Дополнительные сведения о поддержке функций см. в ShouldProcess разделе запрос подтверждения.

Транзакция

Логическая группа команд, обрабатываемых как одна задача. Задача автоматически завершается ошибкой, если любая команда в группе завершается ошибкой, и пользователь может принять или отклонить действия, выполненные внутри транзакции. Чтобы принять участие в транзакции, командлет должен объявить, что он поддерживает транзакции при объявлении атрибута командлета. поддержка транзакций появилась в Windows PowerShell 2,0. Дополнительные сведения о транзакциях см. в разделе Поддержка транзакций.

Отличия командлетов от команд

Командлеты отличаются от команд в других средах командной оболочки следующими способами.

  • Командлеты являются экземплярами классов .NET; они не являются изолированными исполняемыми файлами.
  • Командлеты можно создавать с помощью нескольких десятков строк кода.
  • Командлеты обычно не выполняют собственный синтаксический анализ, представление ошибок или форматирование выходных данных. Синтаксический анализ, представление ошибок и форматирование вывода обрабатываются средой выполнения PowerShell.
  • Командлеты обрабатывают входные объекты из конвейера, а не из потоков текста, а командлеты обычно доставляют объекты в конвейер в качестве выходных данных.
  • Командлеты ориентированы на записи, так как они обрабатывают один объект за раз.

Базовые классы командлетов

Windows PowerShell поддерживает командлеты, которые являются производными от следующих двух базовых классов.

  • Большинство командлетов основаны на классах .NET, производных от базового класса System. Management. Automation. командлет . наследование от этого класса позволяет командлету использовать минимальный набор зависимостей от Windows PowerShell среды выполнения. Это имеет два преимущества. Первое преимущество заключается в том, что объекты командлетов меньше, и, скорее всего, изменения в среде выполнения PowerShell подвергаются меньшему. Второе преимущество заключается в том, что при необходимости можно напрямую создать экземпляр объекта командлета, а затем вызвать его напрямую, а не вызывать его через среду выполнения PowerShell.

  • Более сложные командлеты основаны на классах .NET, производных от базового класса System. Management. Automation. PSCmdlet . Наследование от этого класса обеспечивает гораздо больший доступ к среде выполнения PowerShell. Этот доступ позволяет командлету вызывать скрипты, получать доступ к поставщикам и получать доступ к текущему состоянию сеанса. (Для доступа к текущему состоянию сеанса вы получаете и устанавливаете переменные сеанса и настройки.) Однако наследование от этого класса увеличивает размер объекта командлета, и это означает, что командлет более тесно связан с текущей версией среды выполнения PowerShell.

Как правило, если вам не нужен расширенный доступ к среде выполнения PowerShell, необходимо создать производный от класса System. Management. Automation. командлет . Однако среда выполнения PowerShell имеет широкие возможности ведения журнала для выполнения командлетов. Если модель аудита зависит от этого журнала, можно предотвратить выполнение командлета из другого командлета, производя от класса System. Management. Automation. PSCmdlet .

Атрибуты командлета

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

Имена командлетов

PowerShell использует пару имен глагол-и-существительное для командлетов Name. Например, включенный в PowerShell командлет Get-Command возвращает полный список всех командлетов, зарегистрированных в командной оболочке. Глагол здесь определяет действие, выполняемое командлетом, а существительное определяет ресурс, в котором он выполняет это действие.

Эти имена указываются при объявлении класса .NET в качестве командлета. Дополнительные сведения об объявлении класса .NET в качестве командлета см. в разделе объявление атрибута командлета.

Написание кода командлета

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

Дополнительные сведения о рекомендациях по написанию командлетов см. в разделе рекомендации по разработке командлетов.

См. также:

Основные понятия командлетов PowerShell

Написание командлета PowerShell

Пакет SDK для PowerShell