Командлеты и встроенные функции PowerShell
Командлеты и встроенные функции PowerShell
Понятие командлета
Командлет — это функция, реализованная в виде класса .NET, который предоставляет единый интерфейс для выполнения конкретных задач в среде PowerShell. Термин представляет собой сокращение от «command-let», что буквально означает «маленькая команда». Командлеты являются фундаментальным элементом оболочки PowerShell, обеспечивая объектно-ориентированный подход к управлению операционной системой, приложениями и инфраструктурой.
В отличие от традиционных командных строк, которые обрабатывают данные как текст, командлеты работают с объектами. Результатом выполнения любого командлета является объект конкретного типа данных или набор объектов. Это свойство позволяет передавать объекты напрямую между командлетами через конвейер (pipeline) без необходимости их предварительного преобразования в строки.
Каждый командлет следует строгому соглашению именования Verb-Noun. Первая часть имени указывает на действие, которое выполняет командлет (глагол), а вторая часть определяет объект, над которым выполняется действие (существительное). Например, Get-Process получает объекты процессов, а Stop-Service останавливает объекты служб. Такое соглашение обеспечивает единообразие интерфейса и интуитивную понятность работы с оболочкой.
Командлеты могут быть встроены в саму оболочку (встроенные), поставляться в составе модулей Windows (стандартные модули), загружаться из внешних источников (сторонние модули) или создаваться пользователями самостоятельно. Встроенные командлеты доступны сразу после запуска PowerShell и не требуют установки дополнительных компонентов.
Структура командлета
Командлет состоит из нескольких ключевых компонентов, определяющих его поведение и возможности использования:
- Имя: Уникальное обозначение командлета, состоящее из глагола и существительного.
- Параметры: Входные данные, которые определяют, как именно будет выполняться действие. Параметры могут быть обязательными или необязательными.
- Выходные данные: Объекты или наборы объектов, возвращаемые командлетом после выполнения задачи.
- Описание: Текстовое пояснение функциональности командлета, доступное через систему справки.
- Примеры: Образцы использования, демонстрирующие типичные сценарии применения.
Все параметры командлетов описываются в метаданных, которые позволяют системе автоматически формировать подсказки при вводе команды. Пользователь может получить список всех доступных параметров, используя команду 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: Возобновляет приостановленный процесс.
Эти командлеты часто требуют прав администратора для успешного выполнения, так как затрагивают системные ресурсы.
Поиск и фильтрация (Find, Select, Where)
Глаголы Find, Select, Where используются для навигации по данным и выбора нужных элементов.
- Назначение: Поиск объектов по критериям, выбор подмножества данных, фильтрация результатов.
- Примеры:
Find-Command: Ищет команды в системе.Select-Object: Выбирает конкретные свойства объекта или ограничивает количество выводимых строк.Where-Object: Фильтрует поток объектов на основе заданного условия.Select-String: Ищет строки, соответствующие шаблону, внутри файлов (аналогgrep).Get-Unique: Отбирает уникальные значения из потока.
Глагол Where работает непосредственно с потоком объектов, позволяя применять сложные логические выражения для фильтрации.
Преобразование и форматирование (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
Цепочка действий:
Get-Processполучает все процессы.Where-Objectфильтрует те, у которых использование CPU превышает 10%.Select-Objectвыбирает только имена и потребление CPU для вывода.
Символ . (Точка)
Точка используется для доступа к свойствам объектов и методам. Она также применяется для вызова командлетов из текущего каталога.
$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 обладают рядом особенностей, отличающих их от стандартных командлетов. Они часто являются частью ядра языка и доступны в любой момент без загрузки модулей.
- Динамическая типизация: Функции работают с объектами любого типа, автоматически приводя данные при необходимости.
- Объектно-ориентированность: Результаты работы функций также являются объектами, что позволяет продолжать обработку через конвейер.
- Расширяемость: Пользователь может создавать собственные функции, которые будут работать аналогично встроенным.
- Интеграция с .NET: Многие функции используют классы .NET Framework, предоставляя мощный доступ к системным возможностям.
Пример использования встроенных функций
# Проверка существования файла
if (Test-Path "C:\Temp\Данные.txt") {
# Чтение содержимого
$content = Get-Content "C:\Temp\Данные.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 -Примеры
Для обновления базы справки:
Update-Help
Структура справки
Справка каждого командлета содержит следующие разделы:
- Краткое описание: Однострочное определение функциональности.
- Синтаксис: Все возможные варианты использования с параметрами.
- Параметры: Подробное описание каждого параметра, его типа и обязательности.
- Примеры: Реальные сценарии применения командлета.
- Связанные темы: Ссылки на смежные командлеты и концепции.
Расширенная справка
Система справки поддерживает поиск по ключевым словам, что позволяет находить нужные командлеты даже при отсутствии точного названия:
Get-Help *service* -Detailed
Этот запрос найдет все командлеты, содержащие слово "service" в названии, и покажет подробную информацию о каждом.
См. также
Другие статьи этого же раздела в боковом меню (как на странице «О разделе»). Архитектура PowerShell построена вокруг концепции командлетов (cmdlet). Каждая команда представляет собой отдельный класс, реализующий определенный функционал. Командлеты следуют единообразному… Для дистрибутивов на основе Debian (Ubuntu, Debian, Kali) используется команда apt, для Red Hat Enterprise Linux и CentOS — yum или dnf. Процесс установки включает добавление репозитория Microsoft,… Набор советов, правил, принципов и обычаев в разработке на этом языке. PowerShell — это кроссплатформенная оболочка командной строки и язык сценариев, созданный компанией Microsoft для автоматизации администрирования операционных систем. Инструмент сочетает в себе… Как устроены команды и принципы построения скриптов в PowerShell $this — переменная, указывающая на текущий объект в методах классов. В PowerShell переменная $this используется внутри методов для обращения к свойствам и методам текущего экземпляра класса. Типизация, набор правил определения типа данных значений языка. Основой условной логики служит проверка истинности выражения. Результатом такой проверки является булево значение True (истина) или False (ложь). Скрипт использует эти значения для выбора ветки… Функция в среде PowerShell представляет собой именованный блок кода, который выполняет конкретную задачу и может быть вызван многократно из разных частей скрипта или консоли. Создание функции… Для динамического добавления свойств используется cmdlet Add-Member. Это позволяет расширять функциональность объектов без изменения их исходного кода. PowerShell — это среда командной строки и язык сценариев, разработанный для автоматизации администрирования систем Windows. В отличие от классических языков программирования, где обработка ошибок… PowerShell обладает обширной библиотекой модулей, которые расширяют функциональность оболочки, предоставляя готовые инструменты для управления операционными системами, сетями, облачными сервисами и…История PowerShell
Экосистема автоматизации на PowerShell
Рекомендации по написанию PowerShell-скриптов
Основы языка PowerShell
Синтаксис и операторы PowerShell
Ключевые слова и управляющие конструкции
Типы данных и работа с переменными
Условные выражения и циклы
Функции и продвинутые параметры
Объектная модель и конвейерная обработка
Обработка ошибок и стратегии отладки
Популярные модули и примеры скриптов