Примечание.
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Командлет — это упрощенная команда, используемая в среде PowerShell. Среда выполнения PowerShell вызывает эти командлеты в контексте сценариев автоматизации, предоставляемых в командной строке. Среда выполнения PowerShell также вызывает их программным способом с помощью API PowerShell.
Командлеты
Командлеты выполняют действие и обычно возвращают объект Майкрософт .NET в следующую команду в конвейере. Командлет — это одна команда, которая участвует в семантике конвейера PowerShell. Сюда входят двоичные командлеты (C#), расширенные функции скриптов, CDXML и рабочие процессы.
В этой документации по пакету SDK описывается создание двоичных командлетов, написанных на C#. Сведения о командлетах на основе скриптов см. в следующем разделе:
Чтобы создать двоичный командлет, необходимо реализовать класс командлета, производный от одного из двух специализированных базовых классов командлетов. Производный класс должен:
- Объявите атрибут, определяющий производный класс как командлет.
- Определите общедоступные свойства, которые декорируются атрибутами, которые определяют общедоступные свойства как параметры командлета.
- Переопределите один или несколько методов обработки входных данных для обработки записей.
Сборку, содержащую класс, можно загрузить непосредственно с помощью командлета Import-Module или создать хост-приложение , которое загружает сборку с помощью API System.Management.Automation.Runspaces.InitialSessionState . Оба метода предоставляют программный и командный доступ к функциям командлета.
Термины командлета
Следующие термины часто используются в документации по командлетам PowerShell:
Атрибут командлета
Атрибут .NET, используемый для объявления класса командлета в качестве командлета. Хотя PowerShell использует несколько других атрибутов, которые являются необязательными, требуется атрибут командлета. Дополнительные сведения об этом атрибуте см. в объявлении атрибута командлета.
Параметр командлета
Общедоступные свойства, определяющие параметры, доступные пользователю или приложению, на котором выполняется командлет. Командлеты могут иметь обязательные, именованные, позиционные и [switch] параметры.
[switch] параметры позволяют определять параметры, вычисляемые только в том случае, если параметры указаны в вызове. Дополнительные сведения о различных типах параметров см. в разделе "Параметры командлета".
Набор параметров
Группа параметров, которые можно использовать в той же команде для выполнения определенного действия. Командлет может иметь несколько наборов параметров, но каждый набор параметров должен иметь по крайней мере один уникальный параметр. Хороший дизайн командлета настоятельно предполагает, что уникальный параметр также является обязательным параметром. Дополнительные сведения о наборах параметров см. в разделе "Наборы параметров командлетов".
Динамический параметр
Параметр, добавляемый в командлет во время выполнения. Как правило, динамические параметры добавляются в командлет, если для другого параметра задано определенное значение. Дополнительные сведения о динамических параметрах см. в разделе "Динамические параметры командлета".
Методы обработки входных данных
Класс System.Management.Automation.Командлет предоставляет следующие виртуальные методы, используемые для обработки записей. Все производные классы командлетов должны переопределить один или несколько первых трех методов:
- System.Management.Automation.Командлет.BeginProcessing: используется для предоставления дополнительных функций однократной предварительной обработки для командлета.
- System.Management.Automation.Командлет.ProcessRecord: используется для предоставления функций обработки записей по записям для командлета. Метод System.Management.Automation.Командлет.ProcessRecord можно вызывать любое количество раз или вообще не в зависимости от входных данных командлета.
- System.Management.Automation.Командлет.EndProcessing: используется для предоставления дополнительных однократных функций после обработки для командлета.
- System.Management.Automation.Командлет.StopProcessing: используется для остановки обработки, когда пользователь останавливает командлет асинхронно (например, нажав клавиши CTRL+C).
Дополнительные сведения об этих методах см. в разделе "Методы обработки входных данных командлетов".
При реализации командлета необходимо переопределить по крайней мере один из этих методов обработки входных данных. Как правило, ProcessRecord() — это метод, который вы переопределяете, так как вызывается для каждой записи, которую обрабатывает командлет. Напротив, метод BeginProcessing() и метод EndProcessing() вызываются один раз для выполнения предварительной обработки или последующей обработки записей. Дополнительные сведения об этих методах см. в разделе "Методы обработки входных данных".
Функция ShouldProcess
PowerShell позволяет создавать командлеты, которые запрашивают отзыв пользователя, прежде чем командлет вносит изменения в систему. Чтобы использовать эту функцию, командлет должен объявить, что он поддерживает функцию при объявлении атрибута командлета, и командлет должен вызывать методы System.Management.Automation.Командлет.ShouldProcess и System.Management.Automation.Командлет.ShouldContinue из метода входной обработки.ShouldProcess Дополнительные сведения о поддержке ShouldProcess функций см. в разделе "Запрос подтверждения".
Транзакция
Логическая группа команд, которые рассматриваются как одна задача. Задача автоматически завершается ошибкой, если любая команда в группе завершается ошибкой, и пользователь имеет возможность принять или отклонить действия, выполненные в рамках транзакции. Для участия в транзакции командлет должен объявить, что он поддерживает транзакции при объявлении атрибута командлета. Поддержка транзакций появилась в Windows PowerShell 2.0. Дополнительные сведения о транзакциях см. в разделе "Поддержка транзакций".
Как командлеты отличаются от команд
Командлеты отличаются от команд в других средах командной оболочки следующим образом:
- Командлеты — это экземпляры классов .NET; они не являются автономными исполняемыми файлами.
- Командлеты можно создавать из нескольких десятков строк кода.
- Командлеты обычно не выполняют собственный анализ, презентацию ошибок или форматирование выходных данных. Анализ, презентация ошибок и форматирование выходных данных обрабатываются средой выполнения PowerShell.
- Командлеты обрабатывают входные объекты из конвейера, а не из потоков текста, а командлеты обычно предоставляют объекты в виде выходных данных в конвейер.
- Командлеты ориентированы на запись, так как они обрабатывают один объект за раз.
Базовые классы командлетов
Windows PowerShell поддерживает командлеты, производные от следующих двух базовых классов.
Большинство командлетов основаны на классах .NET, производных от базового класса System.Management.Automation.Командлет. Производный от этого класса позволяет командлету использовать минимальный набор зависимостей в среде выполнения PowerShell Windows. Это имеет два преимущества. Первое преимущество заключается в том, что объекты командлета меньше, и вы, скорее всего, будете затронуты изменениями среды выполнения PowerShell. Второе преимущество заключается в том, что при необходимости можно напрямую создать экземпляр объекта командлета, а затем вызвать его напрямую, а не вызывать его через среду выполнения PowerShell.
Более сложные командлеты основаны на классах .NET, производных от базового класса System.Management.Automation.PSCmdlet. Производный от этого класса предоставляет гораздо больше доступа к среде выполнения PowerShell. Этот доступ позволяет командлету вызывать скрипты, получать доступ к поставщикам и получать доступ к текущему состоянию сеанса. (Чтобы получить доступ к текущему состоянию сеанса, вы получаете и задаете переменные сеанса и настройки.) Тем не менее, производный от этого класса увеличивает размер объекта командлета, и это означает, что командлет более тесно связан с текущей версией среды выполнения PowerShell.
В общем случае, если вам не требуется расширенный доступ к среде выполнения PowerShell, необходимо получить производный от класса System.Management.Automation.Командлет . Однако среда выполнения PowerShell имеет широкие возможности ведения журнала для выполнения командлетов. Если модель аудита зависит от этого ведения журнала, можно запретить выполнение командлета в другом командлете, исходя из класса System.Management.Automation.PSCmdlet .
Атрибуты командлета
PowerShell определяет несколько .NET атрибутов, которые используются для управления командлетами и указания общих функций, предоставляемых PowerShell и которые могут потребоваться командлетом. Например, атрибуты используются для назначения класса в качестве командлета, указания параметров командлета и запроса проверки входных данных, чтобы разработчики командлетов не должны реализовать эту функцию в коде командлета. Дополнительные сведения об атрибутах см. в разделе "Атрибуты PowerShell".
Имена командлетов
PowerShell использует пару имен глаголов и существительных для имен командлетов. Например, командлет, включенный Get-Command в PowerShell, используется для получения всех командлетов, зарегистрированных в командной оболочке. Команда определяет действие, которое выполняет командлет, и существительное определяет ресурс, на котором выполняется командлет.
Эти имена указываются, когда класс .NET объявлен в качестве командлета. Дополнительные сведения о объявлении класса .NET в качестве командлета см. в разделе Cmdlet Attribute Declaration.
Написание кода командлета
Этот документ предоставляет два способа обнаружения написания кода командлета. Если вы предпочитаете просматривать код без многого объяснения, см. примеры кода командлетов. Если вы предпочитаете более подробное описание кода, ознакомьтесь с разделами GetProc Tutorial, StopProc Tutorial или SelectStr Tutorial .
Дополнительные сведения о рекомендациях по написанию командлетов см. в руководстве по разработке командлетов.
См. также
Основные понятия командлетов PowerShell
PowerShell