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

Популярные модули и примеры скриптов

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

Популярные модули и примеры скриптов

Обзор экосистемы модулей 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.Безопасность

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

Управление сертификатами

Командлеты модуля позволяют работать с хранилищами сертификатов. Командлет 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:\Данные\report.txt"
$acl = Get-Acl -Path $file
$newRule = New-Object Система.Безопасность.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 получает информацию о всех файловых системах;
  • Вычисляется процент свободного места для каждого диска;
  • При превышении порога выводится предупреждение.

Скрипт автоматического обновления ПО

Этот скрипт проверяет наличие обновлений для установленных приложений и запускает их установку.

$applications = @("Google Chrome", "Mozilla Firefox", "Adobe Reader")

foreach ($app in $applications) {
Write-Host "Проверка обновлений для $app..."
# В реальном сценарии здесь вызывается API вендора или проверка версии
$updateAvailable = $true # Имитация наличия обновления

if ($updateAvailable) {
Write-Host "Найдено обновление для $app. Запуск установки..."
# Команда запуска установщика
# Start-Process "setup.exe" -ArgumentList "/silent"
} else {
Write-Host "$app уже актуален."
}
}

Скрипт демонстрирует структуру цикла обработки списка приложений и условную логику действий.

Скрипт резервного копирования сжатых архивов

Этот скрипт создает сжатый архив выбранной папки с датой в имени файла.

$sourceFolder = "C:\Данные"
$date = Get-Date -Format "yyyy-MM-dd"
$archiveName = "Backup_$date.zip"
$destinationPath = "D:\Backups\$archiveName"

Compress-Archive -Path "$sourceFolder\*" -DestinationPath $destinationPath -Force
Write-Host "Архив создан: $destinationPath"

# Удаление старых архивов старше 7 дней
$oldArchives = Get-ChildItem "D:\Backups\" -Filter "*.zip" | Where-Object { $_.LastWriteTime -lt (Get-Date).AddDays(-7) }
foreach ($oldArchive in $oldArchives) {
Remove-Item $oldArchive.FullName
Write-Host "Удален старый архив: $($oldArchive.Name)"
}

Функционал:

  • Формирует имя архива с текущей датой;
  • Создает 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 Безопасность
$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 "Данные.csv" -Key "uploads/Данные.csv"

Команда загружает файл в бакет с указанным ключом.


См. также

Другие статьи этого же раздела в боковом меню (как на странице «О разделе»).

Освоение главы0%