Популярные модули и примеры скриптов
Популярные модули и примеры скриптов
Обзор экосистемы модулей 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"
Команда загружает файл в бакет с указанным ключом.
См. также
Другие статьи этого же раздела в боковом меню (как на странице «О разделе»). Архитектура PowerShell построена вокруг концепции командлетов (cmdlet). Каждая команда представляет собой отдельный класс, реализующий определенный функционал. Командлеты следуют единообразному… Для дистрибутивов на основе Debian (Ubuntu, Debian, Kali) используется команда apt, для Red Hat Enterprise Linux и CentOS — yum или dnf. Процесс установки включает добавление репозитория Microsoft,… Набор советов, правил, принципов и обычаев в разработке на этом языке. PowerShell — это кроссплатформенная оболочка командной строки и язык сценариев, созданный компанией Microsoft для автоматизации администрирования операционных систем. Инструмент сочетает в себе… Как устроены команды и принципы построения скриптов в PowerShell $this — переменная, указывающая на текущий объект в методах классов. В PowerShell переменная $this используется внутри методов для обращения к свойствам и методам текущего экземпляра класса. Командлет — это функция, реализованная в виде класса .NET, который предоставляет единый интерфейс для выполнения конкретных задач в среде PowerShell. Термин представляет собой сокращение от… Типизация, набор правил определения типа данных значений языка. Основой условной логики служит проверка истинности выражения. Результатом такой проверки является булево значение True (истина) или False (ложь). Скрипт использует эти значения для выбора ветки… Функция в среде PowerShell представляет собой именованный блок кода, который выполняет конкретную задачу и может быть вызван многократно из разных частей скрипта или консоли. Создание функции… Для динамического добавления свойств используется cmdlet Add-Member. Это позволяет расширять функциональность объектов без изменения их исходного кода. PowerShell — это среда командной строки и язык сценариев, разработанный для автоматизации администрирования систем Windows. В отличие от классических языков программирования, где обработка ошибок…История PowerShell
Экосистема автоматизации на PowerShell
Рекомендации по написанию PowerShell-скриптов
Основы языка PowerShell
Синтаксис и операторы PowerShell
Ключевые слова и управляющие конструкции
Командлеты и встроенные функции PowerShell
Типы данных и работа с переменными
Условные выражения и циклы
Функции и продвинутые параметры
Объектная модель и конвейерная обработка
Обработка ошибок и стратегии отладки