Перейти к основному содержимому

Командлеты и встроенные функции PowerShell

Разработчику Архитектору

Play ITЗагрузка интерактивного демо…


Командлеты и встроенные функции PowerShell​

Общая база пользовательских функций и вызова — функции в коде. Ниже — командлеты и встроенные функции PowerShell.


Понятие командлета​

Командлет — это функция, реализованная в виде класса .NET, который предоставляет единый интерфейс для выполнения конкретных задач в среде PowerShell. Термин представляет собой сокращение от "command-let", что буквально означает "маленькая команда". Командлеты являются фундаментальным элементом оболочки PowerShell, обеспечивая объектно-ориентированный подход к управлению операционной системой, приложениями и инфраструктурой.

В отличие от традиционных командных строк, которые обрабатывают данные как текст, командлеты работают с объектами. Результатом выполнения любого командлета является объект конкретного типа данных или набор объектов. Это свойство позволяет передавать объекты напрямую между командлетами через конвейер (pipeline) без необходимости их предварительного преобразования в строки.

Каждый командлет следует строгому соглашению именования Verb-Noun. Первая часть имени указывает на действие, которое выполняет командлет (глагол), а вторая часть определяет объект, над которым выполняется действие (существительное). Например, Get-Process получает объекты процессов, а Stop-Service останавливает объекты служб. Такое соглашение обеспечивает единообразие интерфейса и интуитивную понятность работы с оболочкой.

Командлеты могут быть встроены в саму оболочку (встроенные), поставляться в составе модулей Windows (стандартные модули), загружаться из внешних источников (сторонние модули) или создаваться пользователями самостоятельно. Встроенные командлеты доступны сразу после запуска PowerShell и не требуют установки дополнительных компонентов.


Структура командлета​

Командлет состоит из нескольких ключевых компонентов, определяющих его поведение и возможности использования:

  1. Имя: Уникальное обозначение командлета, состоящее из глагола и существительного.
  2. Параметры — Входные данные, которые определяют, как именно будет выполняться действие. Параметры могут быть обязательными или необязательными.
  3. Выходные данные: Объекты или наборы объектов, возвращаемые командлетом после выполнения задачи.
  4. Описание: Текстовое пояснение функциональности командлета, доступное через систему справки.
  5. Примеры: Образцы использования, демонстрирующие типичные сценарии применения.

Справка по командлету — см. раздел "Система справки" ниже (Get-Help).


Глаголы командлетов (Verbs)​

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

Система глаголов разделена на категории по типу выполняемого действия. Ниже приведены основные группы глаголов с описанием их назначения и примерами.


Получение данных (Get)​

Глагол Get используется для извлечения объектов из различных источников. Этот глагол является самым распространенным в PowerShell и применяется для чтения информации о системах, файлах, процессах, реестре и других ресурсах.

  • Назначение: Чтение, поиск и получение объектов.
  • Примеры:
    • Get-Process: Получает список активных процессов в системе.
    • Get-Content: Читает содержимое текстового файла.
    • Get-Item: Возвращает объект, представляющий файл или папку.
    • Get-ChildItem: Получает дочерние элементы контейнера (файлы и подпапки).
    • Get-Command: Находит доступные команды в текущей сессии.
    • Get-EventLog: Извлекает записи из журналов событий системы.

При использовании глагола Get система обычно возвращает полный набор свойств объекта, если пользователь явно не запросил конкретные поля.


Создание и добавление (New, Add)​

Глаголы New и Add отвечают за создание новых объектов или элементов в существующих структурах данных.

  • Назначение — Инициализация новых ресурсов, файлов, пользователей, служб или добавление элементов в коллекции.
  • Примеры:
    • New-Item: Создает новый файл, папку или элемент реестра.
    • New-Variable: Объявляет новую переменную в скрипте.
    • New-Object: Создает экземпляр объекта .NET.
    • Add-Member: Добавляет новые свойства или методы к существующему объекту.
    • Add-Content: Добавляет текст в конец файла.
    • New-WebServiceProxy: Создает прокси-объект для взаимодействия с веб-сервисом.

Глагол New подразумевает полную инициализацию нового объекта, тогда как Add часто используется для внесения изменений в уже существующую структуру.


Изменение (Set, Update)​

Глаголы Set и Update предназначены для модификации свойств существующих объектов или изменения состояния системных ресурсов.

  • Назначение — Изменение конфигурации, обновление значений свойств, изменение статуса.
  • Примеры:
    • Set-Location: Меняет текущую рабочую директорию (аналог cd).
    • Set-Content: Заменяет содержимое файла новым значением.
    • Set-Variable: Изменяет значение существующей переменной.
    • Set-Service: Изменяет настройки службы (тип запуска, описание).
    • Обновляет справочную информацию о командлетах.
Update-Help
  • Set-Date: Устанавливает текущую дату и время системы.

Эти командлеты требуют наличия существующего объекта или ресурса, так как они изменяют его состояние, а не создают новый.


Удаление (Remove, Clear)​

Глаголы Remove и Clear используются для уничтожения объектов или очистки их содержимого.

  • Назначение — Удаление файлов, папок, записей реестра, переменных, очистка списков.
  • Примеры:
    • Remove-Item: Удаляет файлы, папки или другие элементы файловой системы.
    • Remove-Variable: Удаляет переменную из текущей области видимости.
    • Clear-Host: Очищает экран консоли от выводимой информации.
    • Clear-Content: Очищает содержимое файла, оставляя его пустым.
    • Remove-EventLog: Удаляет запись из журнала событий.

Различие между Remove и Clear заключается в том, что Remove удаляет сам объект (например, файл исчезает из диска), а Clear сохраняет объект, но очищает его содержимое (файл остается, но пуст).


Управление состоянием (Start, Stop, Restart, Pause, Suspend)​

Группа глаголов Start, Stop, Restart, Pause, Suspend предназначена для управления жизненным циклом процессов, служб и приложений.

  • Назначение — Запуск, остановка, перезапуск или приостановка деятельности объектов.
  • Примеры:
    • Запускает новое приложение или процесс.
Start-Process
  • Stop-Process: Останавливает работающий процесс.
  • Restart-Computer: Перезагружает компьютер.
  • Запускает службу.
Start-Service
  • Stop-Service: Останавливает службу.
  • Pause-Process: Приостанавливает выполнение процесса (доступно не для всех типов процессов).
  • Resume-Process: Возобновляет приостановленный процесс.

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


Конвейер и обработка потока объектов​

Для фильтрации и преобразования данных в конвейере чаще всего используют отдельные командлеты, а не "семейство глаголов" вроде Where-. Утверждённый список глаголов смотрите в Get-Verb; ниже — типичные команды, которые встречаются в цепочках после Get-*:

  • Назначение — отбор, проекция свойств, сортировка, группировка, поиск текста в файлах.
  • Примеры:
    • Where-Object (алиас where): фильтр по условию; в скрипт-блоке доступны $_ или $PSItem.
    • (алиас select) — выбор свойств, -First / -Last, вычисляемые столбцы.
Select-Object
  • Sort-Object, Group-Object, Measure-Object — упорядочивание, группы, агрегаты.
  • ForEach-Object (алиас %): действие над каждым объектом в потоке.
  • поиск по шаблону или regex в тексте файлов — Select-String (обзор вместе с grep и findstr).
Select-String
  • Find-Command, Find-Module: поиск команд и модулей в каталоге, не фильтрация pipeline-объектов.

Не путайте Where-Object с несуществующим шаблоном Where-<Noun> для произвольных ресурсов — фильтрация в конвейере почти всегда именно Where-Object { ... }.


Преобразование и форматирование (ConvertTo, Format, Sort)​

Глаголы ConvertTo, Format, Sort, Group отвечают за изменение представления данных или их упорядочивание.

  • Назначение — Конвертация форматов вывода, сортировка, группировка, визуализация.
  • Примеры:
    • ConvertTo-HTML: Преобразует объекты в HTML-таблицу.
    • ConvertTo-Csv: Экспортирует данные в CSV-формат.
    • Format-List: Форматирует вывод объектов в виде списка свойств.
    • Format-Table: Форматирует вывод объектов в виде таблицы.
    • Sort-Object: Сортирует объекты по указанным свойствам.
    • Group-Object: Группирует объекты по значению указанного свойства.
    • Measure-Object — Вычисляет статистические данные (среднее, сумма, количество) для числовых свойств.

Эти командлеты часто используются в конце цепочки обработки данных перед финальным отображением результата пользователю.


Помощь и справка (Help, Show, Get)​

Глаголы Help, Show, Get предоставляют доступ к документации и системной информации.

  • Назначение — Получение справки, демонстрация возможностей, просмотр системных настроек.
  • Примеры:
    • Get-Help: Отображает справку по любому командлету.
    • Get-Command: Показывает список всех доступных команд.
    • Get-Member: Отображает свойства и методы объекта.
    • Открывает графическое окно для настройки параметров командлета.
Show-Command
  • Get-Error: Возвращает информацию об ошибках последней выполненной операции.

Существительные командлетов (Nouns)​

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

Основные категории существительных включают:

  • Процессы и службы — Process, Service, Job, Task.
  • Файловая система — Item, File, Directory, Path, Drive.
  • Контейнеры и хранилища — Container, Registry, Certificate, Module.
  • Сеть и интернет — NetConnection, NetFirewallRule, WebSession, HttpClient.
  • Данные и конфигурация — Variable, Option, Profile, History.
  • События и мониторинг — Event, Log, Trace, Alert.
  • Пользователи и безопасность — User, Group, Role, Credential.

Примеры сочетаний:

  • Get-Process: Работа с процессами.
  • Set-Item: Работа с элементами файловой системы.
  • Remove-Variable: Работа с переменными.
  • Get-Event: Работа с событиями.

Синтаксис и параметры командлетов​

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


Именованные параметры​

Большинство параметров указываются явно с помощью знака дефиса -. Это наиболее надежный способ передачи данных, так как порядок следования параметров не имеет значения.

Get-Process -Name "notepad" -IncludeUserName

В этом примере:

  • -Name указывает имя процесса для фильтрации.
  • -IncludeUserName запрашивает дополнительную информацию о владельце процесса.

Позиционные параметры​

Некоторые параметры можно указывать без имени, просто перечисляя их значения в правильном порядке. Порядок определяется определением параметра в команде.

Get-Process notepad

Здесь слово notepad автоматически попадает в параметр -Name, так как он объявлен как позиционный в первом порядке.


Обязательные и необязательные параметры​

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

# Пример обязательного параметра в New-Item
New-Item -Path "C:\Temp" -ItemType Directory
# Параметр -ItemType обязателен для создания директории

Аргументы и плейсхолдеры​

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

$processCount = (Get-Process | Measure-Object).Count
if ($processCount -gt 100) {
Write-Host "Много процессов запущено"
}

Специальные символы и операторы в контексте командлетов​

PowerShell использует специфические символы для расширения функциональности командлетов и работы с данными.


Символ $ (Переменные)​

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

$services = Get-Service
$services.Status

Символ | (Конвейер)​

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

Get-Process | Where-Object {$_.CPU -gt 10} | Select-Object Name, CPU

Цепочка действий:

  1. Get-Process получает все процессы.
  2. Where-Object фильтрует те, у которых использование CPU превышает 10%.
  3. выбирает только имена и потребление CPU для вывода.
Select-Object

Символ . (Точка)​

Точка используется для доступа к свойствам объектов и методам. Она также применяется для вызова командлетов из текущего каталога.

$file.Length # Доступ к свойству Length объекта File
.\Script.ps1 # Выполнение скрипта в текущей папке

Символ {} (Блоки кода)​

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

Get-Process | Where-Object { $_.Name -like "*chrome*" }

Символ @() (Массивы)​

Символ @ создает массив из перечисленных элементов или результата выполнения команды.

$files = @("file1.txt", "file2.txt")
Get-Content $files

Символ & (Выполнение команд)​

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

& "C:\Program Files\App\app.exe"

Встроенные функции PowerShell​

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


Функции навигации​

  • Push-Location: Сохраняет текущую директорию в стек и переходит в указанную.
  • Pop-Location: Возвращает предыдущую директорию из стека.
  • Test-Path: Проверяет существование пути или элемента.

Функции работы с данными​

  • Out-File: Сохраняет вывод в файл.
  • Out-GridView: Отображает данные в интерактивном графическом окне.
  • Export-Clixml: Экспортирует объекты в XML-формат с сохранением структуры типов.
  • Import-Clixml: Восстанавливает объекты из XML-файла.
  • Read-Host: Запрашивает ввод данных у пользователя.

Функции обработки ошибок​

  • try / catch / finally: Конструкции языка для обработки исключений (не командлеты).
  • $Error: Коллекция последних возникших ошибок.
  • $LastExitCode: Код выхода последней внешней программы.

Функции управления памятью и средой​

  • Clear-Host: Очищает экран.
  • Clear-Variable: Удаляет переменные.
  • Set-PSDebug: Включает отладку скриптов.
  • Get-PSSnapin: Показывает установленные снаппины (расширения).

Функции системного уровня​

  • Get-Clipboard: Копирует содержимое буфера обмена.
  • Set-Clipboard: Вставляет текст в буфер обмена.
  • Get-WmiObject: Получает данные WMI (устаревший метод, заменен на CIM).
  • Get-CimInstance: Современный аналог WMI для получения информации о системе.

Особенности работы со встроенными функциями​

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

  1. Динамическая типизация: Функции работают с объектами любого типа, автоматически приводя данные при необходимости.
  2. Объектно-ориентированность: Результаты работы функций также являются объектами, что позволяет продолжать обработку через конвейер.
  3. Расширяемость: Пользователь может создавать собственные функции, которые будут работать аналогично встроенным.
  4. Интеграция с .NET: Многие функции используют классы .NET Framework, предоставляя мощный доступ к системным возможностям.

Пример использования встроенных функций​

# Проверка существования файла
if (Test-Path "C:\Temp\data.txt") {
# Чтение содержимого
$content = Get-Content "C:\Temp\data.txt"

# Вывод в графическое окно
$content | Out-GridView

# Сохранение в файл
$content | Export-Clixml "C:\Temp\backup.xml"
} else {
Write-Host "Файл не найден"
}

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


Сравнение командлетов и функций​

Хотя командлеты и функции выполняют схожие задачи, существуют различия в их реализации и использовании.

ХарактеристикаКомандлетыФункции
РеализацияКлассы .NET, компилируемый кодСкрипты PowerShell, интерпретируемый код
ПроизводительностьВысокая скорость выполненияЗависит от сложности логики скрипта
ДоступностьВстроены в оболочку или модулиОпределяются пользователем или системой
ИзменяемостьТребуют обновления модуля/системыМогут быть изменены пользователем
ДокументацияВстроена в систему справки (Get-Help)Документируется автором вручную
Тип данныхВсегда возвращают объекты .NETМогут возвращать любые типы данных

Пользователь может создать функцию, которая имитирует поведение командлета, используя синтаксис function NameOfFunction { ... }. Такие функции становятся частью текущей сессии и могут использоваться так же, как и встроенные команды.


Система справки и документация​

PowerShell предоставляет мощную систему справки, доступную через командлет Get-Help. Эта система включает описание каждого командлета, примеры использования, список параметров и ссылки на дополнительные материалы.


Получение справки​

Для получения общей информации о командлете используется базовый запрос:

Get-Help Get-Process

Для просмотра подробной информации о параметрах:

Get-Help Get-Process -Parameter

Для просмотра примеров использования:

Get-Help Get-Process -Examples

Для обновления базы справки:

Update-Help

Структура справки​

Справка каждого командлета содержит следующие разделы:

  • Краткое описание: Однострочное определение функциональности.
  • Синтаксис: Все возможные варианты использования с параметрами.
  • Параметры: Подробное описание каждого параметра, его типа и обязательности.
  • Примеры: Реальные сценарии применения командлета.
  • Связанные темы: Ссылки на смежные командлеты и концепции.

Расширенная справка​

Система справки поддерживает поиск по ключевым словам, что позволяет находить нужные командлеты даже при отсутствии точного названия:

Get-Help *service* -Detailed

Этот запрос найдет все командлеты, содержащие слово "service" в названии, и покажет подробную информацию о каждом.


Содержание