Популярные модули и примеры скриптов
Play ITЗагрузка интерактивного демо…
Популярные модули и примеры скриптов
Обзор экосистемы модулей PowerShell
PowerShell обладает обширной библиотекой модулей, которые расширяют функциональность оболочки, предоставляя готовые инструменты для управления операционными системами, сетями, облачными сервисами и специализированным оборудованием. Модуль представляет собой набор командлетов (cmdlets), функций, псевдонимов, переменных и других элементов, сгруппированных по тематическому признаку. Установка модуля происходит через реестр или файлы в директориях профиля пользователя или системной директории. Командлет Get-Module позволяет получить список всех доступных модулей, а Import-Module загружает конкретный модуль в текущую сессию.
Существует два основных типа модулей — встроенные модули, поставляемые вместе с PowerShell, и внешние модули, устанавливаемые из онлайн-репозитория PowerShell Gallery. Встроенные модули активируются автоматически при запуске оболочки или требуют явного импорта. Внешние модули требуют установки через пакетный менеджер Install-Module, который скачивает архив с кодом и регистрирует его в системе.
Модули обеспечивают модульную архитектуру разработки, позволяя разделять логику на независимые компоненты. Каждый модуль имеет свой файл манифеста (.psd1), описывающий метаданные, зависимости и экспортируемые элементы. Это упрощает поддержку и обновление программного обеспечения без необходимости перезаписывать базовую систему.
Модуль Microsoft.PowerShell.Core
Модуль Microsoft.PowerShell.Core является базовым компонентом системы, содержащим фундаментальные команды, необходимые для работы оболочки. Он включает в себя все основные командлеты для управления файлами, процессами, переменными и объектами. Этот модуль загружается автоматически при инициализации сеанса PowerShell.
Основные возможности модуля
Командлеты модуля предоставляют доступ к следующим функциям:
- Управление файловой системой (
Get-ChildItem,Copy-Item,Remove-Item); - Работа с процессами (
Start-Process,Stop-Process,Get-Process); - Управление переменными и контекстом (
Set-Variable,Get-Variable,Clear-Host); - Обработка ошибок (
try/catch/finallyв языке, не отдельные командлеты); - Работа с событиями и таймерами (
Register-ObjectEvent,Start-Sleep).
Пример использования командлета для получения списка процессов:
Get-Process | Where-Object { $_.CPU -gt 10 } | Select-Object Name, CPU, Id
В этом примере:
Get-Processвозвращает массив объектов, представляющих запущенные процессы;Where-Objectфильтрует объекты по значению свойстваCPU;- ограничивает вывод до конкретных свойств объекта.
Select-Object
Особенности работы с модулем
Модуль поддерживает работу с конвейером данных, что позволяет передавать результаты одной команды напрямую в другую. Объекты, передаваемые по конвейеру, сохраняют свои свойства и методы, что обеспечивает высокую гибкость обработки данных. Командлеты модуля работают с типами данных .NET, что позволяет использовать полный спектр возможностей платформы.
Модуль Microsoft.PowerShell.Management
Модуль Microsoft.PowerShell.Management содержит команды для управления операционной системой, включая управление службами, планировщиком задач, групповой политикой и другими системными компонентами. Этот модуль часто используется системными администраторами для автоматизации рутинных операций.
Управление службами
Командлеты модуля позволяют управлять службами Windows без использования графического интерфейса. Командлет Get-Service возвращает список всех служб, а Start-Service запускает указанную службу.
Пример скрипта для проверки состояния службы:
$serviceName = "WSearch"
$status = Get-Service -Name $serviceName
if ($status.Status -eq "Running") {
Write-Host "Служба $serviceName работает."
} else {
Write-Host "Служба $serviceName остановлена. Запуск..."
Start-Service -Name $serviceName
}
В данном коде:
$serviceNameхранит имя целевой службы;Get-Serviceполучает объект службы;- Свойство
Statusопределяет текущее состояние; - Условный оператор проверяет статус и выполняет соответствующее действие.
Планировщик задач
Модуль предоставляет команды для создания и управления задачами в Планировщике заданий Windows. Командлет Register-ScheduledTask создает новую задачу, а Get-ScheduledTask отображает существующие задачи.
Пример создания задачи для ежедневного резервного копирования:
$action = New-ScheduledTaskAction -Execute "C:\Scripts\Backup.ps1"
$trigger = New-ScheduledTaskTrigger -Daily -At 2am
$settings = New-ScheduledTaskSettingsSet -StartWhenAvailable -DontStopOnIdleEnd
Register-ScheduledTask -TaskName "DailyBackup" -Action $action -Trigger $trigger -Settings $settings
Этот скрипт:
- Создает действие, выполняющее скрипт резервного копирования;
- Настраивает триггер на ежедневное выполнение в 2 часа ночи;
- Определяет параметры выполнения задачи;
- Регистрирует задачу в Планировщике заданий.
Модуль Microsoft.PowerShell.Security
Модуль Microsoft.PowerShell.Security предоставляет инструменты для управления безопасностью системы, включая работу с сертификатами, шифрованием и правами доступа. Этот модуль особенно важен для специалистов по информационной безопасности.
Управление сертификатами
Командлеты модуля позволяют работать с хранилищами сертификатов. Командлет Get-ChildItem с параметром -Path Cert: обращается к хранилищу сертификатов.
Пример поиска сертификата по отпечатку:
$thumbprint = "A1B2C3D4E5F6G7H8I9J0K1L2M3N4O5P6Q7R8S9T0"
$cert = Get-ChildItem -Path Cert:\LocalMachine\My -CodeSigningCert | Where-Object { $_.Thumbprint -eq $thumbprint }
if ($cert) {
Write-Host "Сертификат найден: $($cert.Subject)"
} else {
Write-Host "Сертификат не найден."
}
В этом примере:
- Хранилище
LocalMachine\Myсодержит личные сертификаты; - Параметр
-CodeSigningCertфильтрует только подписывающие сертификаты; - Сравнение отпечатка позволяет точно идентифицировать нужный сертификат.
Управление правами доступа
Модуль включает команды для работы с правами доступа к файлам и папкам. Командлет Get-Acl получает объект прав доступа, а Set-Acl изменяет их.
Пример изменения прав доступа к файлу:
$file = "C:\Data\report.txt"
$acl = Get-Acl -Path $file
$newRule = New-Object System.Security.AccessControl.FileSystemAccessRule("DOMAIN\User", "Read", "Allow")
$acl.AddAccessRule($newRule)
Set-Acl -Path $file -AclObject $acl
Операция:
- Получает текущие правила доступа к файлу;
- Создает новое правило для добавления прав чтения пользователю;
- Применяет измененные правила к файлу.
Модуль Microsoft.PowerShell.Host
Модуль Microsoft.PowerShell.Host содержит функции для взаимодействия с хост-приложением, то есть средой, в которой выполняется PowerShell. Этот модуль используется для настройки внешнего вида консоли и управления поведением интерфейса.
Настройка внешнего вида
Командлеты модуля позволяют изменять цвета, шрифты и другие визуальные параметры консоли. Командлет Set-Host меняет атрибуты окна.
Пример установки цветового оформления:
$host.UI.RawUI.WindowTitle = "Системная консоль"
$host.UI.RawUI.BackgroundColor = "DarkBlue"
$host.UI.RawUI.ForegroundColor = "White"
Этот код:
- Устанавливает заголовок окна консоли;
- Меняет фон на темно-синий;
- Устанавливает цвет текста на белый.
Управление буфером
Модуль предоставляет команды для работы с буфером вывода. Командлет Clear-Host очищает экран, а Write-Host выводит текст с возможностью форматирования.
Пример вывода информации с подсветкой:
Write-Host "Статус системы:" -ForegroundColor Green
Write-Host "Проверка завершена успешно." -ForegroundColor Yellow
Write-Host "Ошибка обнаружена." -ForegroundColor Red
Каждая строка выводится своим цветом, что улучшает читаемость отчетов.
Модуль Microsoft.PowerShell.Utility
Модуль Microsoft.PowerShell.Utility содержит вспомогательные команды, не относящиеся к конкретной области управления. Эти команды используются для работы с объектами, данными и пользовательским вводом.
Работа с объектами
Командлеты модуля позволяют преобразовывать данные между различными форматами. Командлет ConvertTo-Json преобразует объект в строку JSON, а ConvertFrom-Json делает обратное.
Пример конвертации объекта в JSON:
$user = @{
Name = "Timur"
Age = 31
Role = "Developer"
}
$jsonString = $user | ConvertTo-Json
Write-Host $jsonString
Результатом будет строка:
{
"Name": "Timur",
"Age": 31,
"Role": "Developer"
}
Ввод данных от пользователя
Командлет Read-Host запрашивает ввод данных у пользователя. Это полезно для создания интерактивных скриптов.
Пример скрипта с запросом имени:
$name = Read-Host "Введите ваше имя"
Write-Host "Привет, $name!"
Пользователь вводит имя, которое сохраняется в переменной $name, после чего выводится приветствие.
Модуль Microsoft.PowerShell.LocalAccounts
Модуль Microsoft.PowerShell.LocalAccounts предназначен для управления локальными учетными записями пользователей и групп в Windows. Он позволяет создавать, удалять и модифицировать учетные записи без использования графических инструментов.
Создание локального пользователя
Командлет New-LocalUser создает нового пользователя с заданными параметрами.
Пример создания пользователя:
$password = ConvertTo-SecureString "Password123" -AsPlainText -Force
New-LocalUser -Name "JohnDoe" -Password $password -FullName "John Doe" -Description "Разработчик" -AccountNeverExpires
Операция:
- Преобразует обычный пароль в защищенную строку;
- Создает учетную запись с именем, полным именем и описанием;
- Устанавливает флаг отсутствия истечения срока действия пароля.
Добавление в группу
Командлет Add-LocalGroupMember добавляет пользователя в локальную группу.
Пример добавления в группу администраторов:
Add-LocalGroupMember -Group "Administrators" -Member "JohnDoe"
Это дает пользователю права администратора на локальной машине.
Модуль Microsoft.PowerShell.Diagnostics
Модуль Microsoft.PowerShell.Diagnostics предоставляет инструменты для мониторинга производительности системы и сбора диагностической информации. Он включает команды для работы с журналом событий, счетчиками производительности и трассировкой.
Просмотр журнала событий
Командлет Get-WinEvent извлекает записи из журналов событий Windows.
Пример получения последних ошибок:
$errors = Get-WinEvent -FilterHashtable @{LogName='Система'; Level=2} -MaxEvents 10
foreach ($error in $errors) {
Write-Host "Дата: $($error.TimeCreated)" -ForegroundColor Red
Write-Host "Идентификатор: $($error.Id)" -ForegroundColor Red
Write-Host "Сообщение: $($error.Message)" -ForegroundColor Red
Write-Host "---"
}
Код:
- Фильтрует события по типу журнала и уровню (ошибки имеют уровень 2);
- Ограничивает количество выводимых записей;
- Выводит детали каждого события с цветовой маркировкой.
Мониторинг производительности
Командлет Get-Counter собирает данные со счетчиков производительности.
Пример мониторинга использования ЦП:
while ($true) {
$cpu = Get-Counter "\Processor(_Total)\% Processor Time"
Write-Host "Загрузка ЦП: $($cpu.CounterSamples.CookedValue)%"
Start-Sleep -Seconds 5
}
Скрипт бесконечно обновляет значение загрузки процессора каждые 5 секунд.
Примеры сложных скриптов в PowerShell
Скрипт мониторинга дискового пространства
Этот скрипт проверяет свободное место на всех дисках и отправляет уведомление при достижении порога заполнения.
$threshold = 90
$diskDrives = Get-PSDrive -PSProvider FileSystem | Where-Object { $_.Used -gt 0 }
foreach ($drive in $diskDrives) {
$freeSpace = [math]::Round((1 - ($drive.Used / ($drive.Used + $drive.Free))) * 100, 2)
if ($freeSpace -lt $threshold) {
$message = "Диск $($drive.Name) заполнен на $(100 - $freeSpace)% (свободно: $freeSpace%)"
Write-Warning $message
# Здесь можно добавить отправку email или логирование
}
}
Логика работы:
- Переменная
$thresholdзадает порог заполнения в процентах; Get-PSDriveполучает информацию о всех файловых системах;- Вычисляется процент свободного места для каждого диска;
- При превышении порога выводится предупреждение.
Скрипт автоматического обновления ПО
Этот скрипт проверяет наличие обновлений для установленных приложений и запускает их установку.
Код ITЗагрузка примера кода…
Скрипт демонстрирует структуру цикла обработки списка приложений и условную логику действий.
Скрипт резервного копирования сжатых архивов
Этот скрипт создает сжатый архив выбранной папки с датой в имени файла.
Код ITЗагрузка примера кода…
Функционал:
- Формирует имя архива с текущей датой;
- Создает ZIP-архив из содержимого папки;
- Удаляет архивы старше 7 дней для экономии места.
Модуль Pester для тестирования кода
Модуль Pester является стандартом де-факто для написания тестов в PowerShell. Он позволяет создавать юнит-тесты для проверки корректности работы скриптов и командлетов.
Установка и настройка
Модуль устанавливается через команду:
Install-Module -Name Pester -Scope CurrentUser
Пример теста
Файл теста должен иметь расширение .Tests.ps1.
Describe "Тестирование функции сложения" {
It "Должна складывать два положительных числа" {
Add-Numbers -a 5 -b 3 | Should -Be 8
}
It "Должна складывать отрицательные числа" {
Add-Numbers -a -5 -b -3 | Should -Be -8
}
It "Должна возвращать ноль при сложении нуля" {
Add-Numbers -a 0 -b 0 | Should -Be 0
}
}
В этом примере:
- Блок
Describeгруппирует связанные тесты; - Блок
Itопределяет отдельный тестовый случай; - Метод
Shouldпроверяет соответствие результата ожидаемому значению.
Запуск тестов:
Invoke-Pester
Модуль PSReadLine для улучшения ввода
Модуль PSReadLine значительно улучшает опыт работы с интерактивной оболочкой, добавляя функции автодополнения, истории команд и подсветки синтаксиса.
Основные возможности
- Автодополнение команд и параметров;
- История команд с поиском;
- Подсветка синтаксиса в реальном времени;
- Персонализация поведения ввода.
Настройка конфигурации
Конфигурация сохраняется в файле PSReadLineOptions.psd1 или настраивается через код.
Пример настройки:
Set-PSReadLineOption -PredictionSource History
Set-PSReadLineOption -HistorySaveStyle SaveNothing
Set-PSReadLineKeyHandler -Chord "Ctrl+LeftArrow" -Function BackwardWord
Set-PSReadLineKeyHandler -Chord "Ctrl+RightArrow" -Function ForwardWord
Эти команды:
- Включают предсказание команд на основе истории;
- Отключают сохранение истории в файл;
- Настраивают навигацию по словам с помощью клавиш управления.
Модуль Invoke-RestMethod для работы с веб-API
Модуль Microsoft.PowerShell.WebCmdlets (встроенный) содержит командлеты Invoke-RestMethod и Invoke-WebRequest для взаимодействия с веб-ресурсами.
Получение данных из REST API
Пример получения данных о погоде:
$url = "https://api.openweathermap.org/Данные/2.5/weather?q=Moscow&appid=YOUR_API_KEY&units=metric"
$response = Invoke-RestMethod -Uri $url -Method Get
Write-Host "Город: $($response.name)"
Write-Host "Температура: $($response.main.temp)°C"
Write-Host "Влажность: $($response.main.humidity)%"
Код:
- Формирует URL запроса с параметрами;
- Выполняет GET-запрос к API;
- Распарсивает ответ JSON и выводит ключевые поля.
Отправка данных POST-запросом
Пример отправки формы на сервер:
$body = @{
username = "timur"
password = "secret"
} | ConvertTo-Json
$headers = @{
"Content-Type" = "application/json"
}
$response = Invoke-RestMethod -Uri "https://example.com/api/login" -Method Post -Body $body -Headers $headers
Write-Host "Ответ сервера: $($response.status)"
Операция:
- Формирует тело запроса в формате JSON;
- Устанавливает заголовки контента;
- Отправляет POST-запрос и обрабатывает ответ.
Модуль ActiveDirectory для управления доменом
Модуль ActiveDirectory предоставляет команды для управления объектами в домене Windows Server. Он требует подключения к контроллеру домена.
Поиск пользователей
Пример поиска пользователей по имени:
$searchQuery = "Timur"
$users = Get-ADUser -Filter "Name -like '*$searchQuery*'" -Properties EmailAddress, Department
foreach ($user in $users) {
Write-Host "Имя: $($user.Name)"
Write-Host "Email: $($user.EmailAddress)"
Write-Host "Отдел: $($user.Department)"
Write-Host "---"
}
Функционал:
- Использует фильтр LDAP для поиска совпадений;
- Загружает дополнительные свойства пользователей;
- Выводит информацию в удобном формате.
Создание группы и добавление участников
New-ADGroup -Name "Developers" -GroupScope Global -GroupCategory Security
$members = Get-ADUser -Filter "Department -eq 'IT'"
Add-ADGroupMember -Identity "Developers" -Members $members.SamAccountName
Скрипт:
- Создает новую группу безопасности;
- Находит пользователей определенного отдела;
- Добавляет их в группу.
Модуль SqlServer для работы с базами данных
Модуль SqlServer позволяет выполнять SQL-запросы непосредственно из PowerShell без использования внешних утилит.
Подключение к базе данных
$serverInstance = "localhost\SQLEXPRESS"
$database = "TestDB"
$query = "SELECT Name, CreationDate FROM sys.databases"
$results = Invoke-Sqlcmd -ServerInstance $serverInstance -Database $database -Query $query
foreach ($row in $results) {
Write-Host "База: $($row.Name), Дата создания: $($row.CreationDate)"
}
Пример показывает подключение к экземпляру SQL Server и выборку данных из системной таблицы.
Обновление данных
$updateQuery = "UPDATE Users SET IsActive = 0 WHERE LastLogin < '2025-01-01'"
Invoke-Sqlcmd -ServerInstance $serverInstance -Database $database -Query $updateQuery
Write-Host "Обновлено строк: $([int]$SQLCMDSTATUS)"
Команда выполняет обновление и возвращает количество затронутых строк.
Модуль AzureRM и Az для облачных сервисов
Модули AzureRM (устаревший) и Az (современный) предоставляют инструменты для управления ресурсами в Microsoft Azure.
Подключение к подписке
Connect-AzAccount
Select-AzSubscription -SubscriptionName "My Subscription"
Эти команды авторизуют пользователя и выбирают активную подписку.
Создание виртуальной машины
$rgName = "DevRG"
$vmName = "DevVM"
$image = "WindowsServer2022Datacenter"
New-AzResourceGroup -Name $rgName -Location "EastUS"
New-AzVm -ResourceGroupName $rgName -Name $vmName -Image $image -Size "Standard_DS1_v2"
Скрипт создает ресурсную группу и развертывает виртуальную машину в указанной локации.
Управление хранилищем
$storageAccount = New-AzStorageAccount -ResourceGroupName $rgName -Name "devstorage123" -Location "EastUS" -SkuName Standard_LRS
$context = New-AzStorageContext -StorageAccountName $storageAccount.StorageAccountName -StorageAccountKey (Get-AzStorageAccountKey -ResourceGroupName $rgName -Name $storageAccount.StorageAccountName)[0].Value
Set-AzStorageBlobContent -Container "logs" -File "log.txt" -Blob "current.log" -Context $context
Операция создает хранилище, получает ключ доступа и загружает файл в контейнер.
Модуль VMware.PowerCLI для виртуализации
Модуль VMware.PowerCLI позволяет управлять инфраструктурой VMware vSphere из командной строки.
Подключение к vCenter
Connect-VIServer -Server "vcenter.example.com" -User "admin" -Password (ConvertTo-SecureString "password" -AsPlainText -Force)
Команда устанавливает соединение с сервером виртуализации.
Создание виртуальной машины
$vmTemplate = Get-Template -Name "WinServer2022"
New-VM -Name "NewVM" -Template $vmTemplate -Datacenter "DC1" -Cluster "Cluster1"
Скрипт клонирует шаблон и разворачивает новую виртуальную машину.
Управление питанием
$vm = Get-VM -Name "OldVM"
Stop-VM -VM $vm -Confirm:$false
Start-VM -VM $vm
Команды останавливают и запускают виртуальную машину без подтверждения.
Модуль Docker для контейнеризации
Модуль Docker предоставляет команды для управления контейнерами Docker из PowerShell.
Подключение к движку
docker ps
Базовая команда показывает запущенные контейнеры.
Создание образа
docker build -t myapp:v1 .
Команда собирает образ из Dockerfile в текущей директории.
Запуск контейнера
docker run -d -p 8080:80 --name web-server myapp:v1
Скрипт запускает контейнер в фоновом режиме с пробросом порта.
Модуль AWS Tools for PowerShell
Модуль *AWS.Tools.Family позволяет управлять ресурсами Amazon Web Services из PowerShell.
Подключение к AWS
Initialize-AWSCredentials -AccessKey "AKIAIOSFODNN7EXAMPLE" -SecretKey "wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY"
Команда инициализирует учетные данные для доступа к AWS.
Создание S3-бакета
New-S3Bucket -BucketName "my-test-bucket-2026" -Region "us-east-1"
Создает новый бакет в указанной географической зоне.
Загрузка файла
Put-S3Object -BucketName "my-test-bucket-2026" -File "data.csv" -Key "uploads/data.csv"
Команда загружает файл в бакет с указанным ключом.
Как выбирать модули под задачу
Чтобы не перегружать стек, выбирайте модуль по принципу "минимально достаточного":
- системное администрирование Windows:
Microsoft.PowerShell.*,CimCmdlets; - Microsoft 365 и облака:
Microsoft.Graph,Az; - тесты и качество:
Pester,PSScriptAnalyzer; - узкая инфраструктура — AD, SQL, VMware, AWS только при реальной потребности.
Перед внедрением в прод — проверьте версию модуля, совместимость с pwsh 7+, и требования к правам или секретам.
См. также: