Управление модулями PowerShell: установка, обновление и удаление для сисадмина

Модуль PowerShell — это готовый набор командлетов, функций и скриптов, который превращает голую оболочку в полноценный инструмент администратора. Управлять Active Directory из консоли? Нужен модуль. Автоматизировать обновления Windows, мониторить SQL Server или гонять задачи по VMware из скрипта? Снова модуль. За 15 лет работы с Windows-инфраструктурами я убедился: тот, кто умеет грамотно работать с модулями, экономит от двух до пяти часов в неделю — просто за счёт автоматизации рутины.
В этой статье пройдём полный цикл: от настройки репозиториев до офлайн-установки в изолированных средах. Все примеры проверены вживую на Windows Server 2019/2022 и Windows 10/11.
Что такое модуль PowerShell и где он живёт
Модуль PowerShell — это, по сути, папка с файлами .psm1, .psd1 и командлетами, упакованная для переиспользования. Windows «из коробки» тащит с собой десятки таких модулей: NetTCPIP, Storage, ScheduledTasks и ещё много чего. Всё остальное ставится из репозиториев или вручную — об этом и поговорим.
Посмотреть все доступные в системе модули:
# Все модули, которые PowerShell видит в текущем PSModulePath
Get-Module -ListAvailable
# Только загруженные в текущую сессию
Get-Module
# Быстрый поиск: есть ли нужный модуль?
Get-Module -ListAvailable -Name ActiveDirectory
Модули хранятся в путях, которые перечислены в переменной $env:PSModulePath. Выведите её — и сразу поймёте, куда именно PowerShell смотрит при импорте:
$env:PSModulePath -split ';'
Типичный вывод на сервере с доменом:
C:\Users\admin\Documents\WindowsPowerShell\Modules
C:\Program Files\WindowsPowerShell\Modules
C:\Windows\system32\WindowsPowerShell\v1.0\Modules
Install-Module без флага -Scope CurrentUser, попадают в C:\Program Files\WindowsPowerShell\Modules и доступны всем пользователям системы. С флагом -Scope CurrentUser — только текущему пользователю, в его домашнем профиле.Настройка репозиториев PowerShell
По умолчанию PowerShell знает об одном репозитории — PSGallery (gallery.technet.microsoft.com / powershellgallery.com). Публичный магазин от Microsoft и сообщества, там сейчас больше 10 000 пакетов. На практике хватает почти для всего.
# Посмотреть список подключённых репозиториев
Get-PSRepository
Пример вывода:
Name InstallationPolicy SourceLocation
---- ------------------ --------------
PSGallery Untrusted https://www.powershellgallery.com/api/v2
Обратите внимание: PSGallery по умолчанию помечен как Untrusted. При каждой установке PowerShell будет переспрашивать — это быстро надоедает. На своих серверах я первым делом убираю этот вопрос:
Set-PSRepository -Name PSGallery -InstallationPolicy Trusted
Подключение корпоративного репозитория
В изолированных или корпоративных средах мы обычно поднимаем локальный репозиторий — сетевая папка или внутренний NuGet-сервер. Регистрируется одной командой, никаких лишних телодвижений:
# Зарегистрировать SMB-папку как репозиторий
Register-PSRepository `
-Name CorpModules `
-SourceLocation '\\msk-srv01\PSRepo' `
-InstallationPolicy Trusted
# Проверить
Get-PSRepository
Удалить репозиторий, если он больше не нужен:
Unregister-PSRepository -Name CorpModules
Install-Module без доступа к gallery.technet.microsoft.com зависнет или выдаст ошибку тайм-аута.Поиск и установка модулей из PSGallery
Поиск модуля
Прежде чем ставить — найдите нужный пакет. Find-Module поддерживает маски и теги, что сильно ускоряет поиск:
# Найти все модули, связанные с SQL
Find-Module -Name *SQL*
# Найти модули с тегом "ActiveDirectory"
Find-Module -Tag ActiveDirectory
# Посмотреть детальную информацию перед установкой
Find-Module -Name PSWindowsUpdate | Select-Object Name, Version, Author, Description
Установка модуля
Установка — одна команда. PowerShell сам разберётся с зависимостями и скачает всё необходимое:
# Установить последнюю версию для всех пользователей (требует прав администратора)
Install-Module -Name PSWindowsUpdate
# Установить только для текущего пользователя (без прав администратора)
Install-Module -Name PSWindowsUpdate -Scope CurrentUser
# Установить конкретную версию
Install-Module -Name SqlServer -RequiredVersion 21.1.18256
# Установить несколько модулей сразу
'PSWindowsUpdate','ImportExcel','Posh-SSH' | ForEach-Object {
Install-Module -Name $_ -Force -Confirm:$false
}
-AllowClobber пригодится, когда новый модуль содержит командлеты с именами, уже существующими в системе. Без него установка завершится ошибкой конфликта имён.Политика выполнения скриптов
Если при первом запуске командлетов из нового модуля падает ошибка "cannot be loaded because running scripts is disabled" — это политика выполнения. Лечится так:
# Проверить текущую политику
Get-ExecutionPolicy
# Разрешить локальные скрипты и скрипты с подписью из сети
Set-ExecutionPolicy RemoteSigned -Scope LocalMachine
# Для одного пользователя
Set-ExecutionPolicy RemoteSigned -Scope CurrentUser
Просмотр установленных модулей и их командлетов
После установки стоит убедиться, что всё прошло нормально, и посмотреть, какие именно командлеты появились в системе:
# Список всех установленных через Install-Module пакетов
Get-InstalledModule
# Вся информация о конкретном модуле
Get-InstalledModule -Name PSWindowsUpdate | Format-List *
# Импортировать модуль в текущую сессию (обычно происходит автоматически)
Import-Module -Name PSWindowsUpdate
# Посмотреть все командлеты модуля
Get-Command -Module PSWindowsUpdate
# Быстрый онлайн-просмотр без импорта
(Find-Module -Name ImportExcel).AdditionalMetadata
Import-Module нужен для ускорения первого запуска или при конфликтах версий.Офлайн-установка модулей (для изолированных серверов)
В большинстве продакшн-сред серверы в интернет не смотрят. Мы в таких случаях используем проверенный алгоритм офлайн-установки:
Шаг 1: Скачайте модуль на машине с интернетом
# Скачать модуль как файл без установки
Save-Module -Name PSWindowsUpdate -Path 'C:\Temp\PSModules'
Save-Module -Name ImportExcel -Path 'C:\Temp\PSModules'
# Или сразу с зависимостями
Save-Module -Name dbatools -Path 'C:\Temp\PSModules' -IncludeDependencies
Шаг 2: Перенесите папки на изолированный сервер
Скопируйте скачанные папки модулей — каждая папка это один модуль — в директорию, которая входит в $env:PSModulePath:
# Например, скопировать в общую папку модулей
Copy-Item -Path 'C:\Temp\PSModules\PSWindowsUpdate' `
-Destination 'C:\Program Files\WindowsPowerShell\Modules\' `
-Recurse -Force
Шаг 3: Разблокируйте файлы (если они пришли с другой машины)
# Снять MOTW (Mark of the Web) с файлов модуля
Get-ChildItem 'C:\Program Files\WindowsPowerShell\Modules\PSWindowsUpdate' `
-Recurse | Unblock-File
Шаг 4: Проверьте установку
Get-Module -ListAvailable -Name PSWindowsUpdate
Import-Module PSWindowsUpdate
Get-Command -Module PSWindowsUpdate
dbatools) весят несколько сотен мегабайт из-за встроенных сборок .NET. Убедитесь, что у вас достаточно места в папке модулей и что версия .NET на целевой машине соответствует требованиям модуля.Обновление модулей PowerShell
Устаревшие модули — это не просто пропущенные функции. Это дыры в безопасности. Обновляться регулярно — такая же гигиена, как патчить саму ОС.
# Обновить конкретный модуль до последней версии
Update-Module -Name SqlServer
# Обновить все установленные модули сразу
Update-Module
# Обновить с принудительной перезаписью (игнорировать предупреждения)
Update-Module -Force
# Посмотреть, какие модули устарели (сравнить с PSGallery)
Get-InstalledModule | ForEach-Object {
$latest = Find-Module -Name $_.Name -ErrorAction SilentlyContinue
if ($latest -and [version]$latest.Version -gt [version]$_.Version) {
[PSCustomObject]@{
Name = $_.Name
Installed = $_.Version
Available = $latest.Version
}
}
}
После обновления модуль нужно перезагрузить в текущей сессии:
Import-Module -Name PSWindowsUpdate -Force
Удаление модулей PowerShell
Удаление тоже случается регулярно: конфликтующие версии, модули от уволившихся коллег, тестовые пакеты, которые кто-то случайно затащил в продакшн.
# Удалить модуль из системы
Uninstall-Module -Name PSWindowsUpdate
# Удалить конкретную версию (если установлено несколько)
Uninstall-Module -Name SqlServer -RequiredVersion 21.1.18230
# Удалить все версии модуля сразу
Get-InstalledModule -Name SqlServer -AllVersions | Uninstall-Module -Force
# Выгрузить модуль из текущей сессии (не удаляет с диска)
Remove-Module -Name PSWindowsUpdate
Uninstall-Module работает только с модулями, установленными через Install-Module. Встроенные модули Windows (из C:\Windows\system32\WindowsPowerShell\) таким способом не удаляются — их нужно удалять через роли и компоненты Windows.Работа с несколькими версиями одного модуля
Иногда разные скрипты требуют разных версий одного модуля. PowerShell умеет держать несколько версий параллельно — это реально выручает:
# Установить несколько версий рядом
Install-Module -Name SqlServer -RequiredVersion 21.1.18230 -AllowClobber
Install-Module -Name SqlServer -RequiredVersion 22.0.59 -AllowClobber
# Посмотреть все установленные версии
Get-InstalledModule -Name SqlServer -AllVersions
# Импортировать конкретную версию
Import-Module -Name SqlServer -RequiredVersion 21.1.18230
Топ модулей PowerShell для системных администраторов
Вот список модулей, которые я ставлю на каждый рабочий сервер. Проверено годами и десятками проектов:
- PSWindowsUpdate — управление обновлениями Windows из PowerShell. Ставить обновления, скрывать нежелательные, смотреть историю. Без него автоматизация патчинга просто неудобна.
- ActiveDirectory — входит в состав RSAT, управление объектами AD: пользователи, группы, OU, GPO. Ставится через
Add-WindowsFeature RSAT-AD-PowerShellна серверах или через Apps & Features на десктопе. - ImportExcel — работа с Excel-файлами без установленного Excel. Если нужно генерировать отчёты прямо из скриптов — лучше варианта не найдёте.
- Posh-SSH — SSH-клиент прямо в PowerShell. Подключаться к Linux-серверам, гонять команды, передавать файлы — всё не выходя из скрипта.
- SqlServer — официальный модуль Microsoft для SQL Server и Azure SQL. Запросы, бэкапы, управление агентом — всё через PowerShell.
- dbatools — огромный инструментарий для DBA: миграция баз, проверка состояния, аудит конфигурации. Больше 500 командлетов — серьёзно.
- VMware.PowerCLI — управление инфраструктурой VMware vSphere/ESXi из PowerShell. Создать VM, снять snapshot, проверить утилизацию ресурсов — без GUI.
- Microsoft.Graph — работа с Microsoft 365 через Graph API: пользователи, лицензии, почта, Teams. Незаменим, если в компании активно используется облако.
- Az — официальный модуль Azure PowerShell. Всё, что нужно для работы с Azure: поднять VM, настроить сеть, подключить хранилище — делается отсюда.
- NetSecurity — встроенный модуль для управления Windows Firewall прямо из консоли. Добавляем правила, аудитируем конфигурацию, блокируем порты — без единого клика мышью.
Автоматизация установки модулей через скрипт развёртывания
Когда принимаешь новый сервер в работу, тратить время на ручную установку каждого модуля — последнее дело. Мы давно держим один скрипт, который разворачивает всё необходимое за один прогон:
# deploy-ps-modules.ps1
# Запускать от имени администратора
$modules = @(
'PSWindowsUpdate',
'ImportExcel',
'Posh-SSH',
'dbatools',
'SqlServer'
)
# Убедиться, что PSGallery доверенный
Set-PSRepository -Name PSGallery -InstallationPolicy Trusted
foreach ($mod in $modules) {
if (-not (Get-InstalledModule -Name $mod -ErrorAction SilentlyContinue)) {
Write-Host "Устанавливаю $mod..." -ForegroundColor Cyan
Install-Module -Name $mod -Scope AllUsers -Force -AllowClobber
Write-Host "OK: $mod установлен" -ForegroundColor Green
} else {
$ver = (Get-InstalledModule -Name $mod).Version
Write-Host "Пропускаю $mod (уже установлен, версия $ver)" -ForegroundColor Yellow
}
}
Write-Host "`nУстановлено модулей: $($modules.Count)" -ForegroundColor Green
Диагностика проблем с модулями
Модуль не подгружается, командлеты молчат. Знакомая ситуация. Вот где копать в первую очередь:
# 1. Проверить, что модуль вообще виден
Get-Module -ListAvailable -Name ModuleName
# 2. Проверить политику выполнения
Get-ExecutionPolicy -List
# 3. Попробовать явный импорт с подробным выводом
Import-Module ModuleName -Verbose
# 4. Проверить зависимости модуля
(Get-Module -ListAvailable -Name ModuleName).RequiredModules
# 5. Проверить, не заблокированы ли файлы (MOTW)
Get-ChildItem "$env:ProgramFiles\WindowsPowerShell\Modules\ModuleName" -Recurse |
Where-Object { (Get-Item $_.FullName -Stream Zone.Identifier -ErrorAction SilentlyContinue) } |
Select-Object FullName
За 15 лет работы с Windows-инфраструктурами я убедился: модули PowerShell — это не надстройка над системой, а её несущий каркас. Один раз грамотно выстроить процесс — репозитории, версионирование, офлайн-доставка на изолированные сегменты сети — и каждый следующий проект запускается в разы быстрее. Корпоративный репозиторий настраивается примерно за час. После этого любой модуль в инфраструктуре встаёт одной командой. Один час против бесконечных «а какая версия у тебя стоит?».
Официальная документация: Microsoft Learn — PowerShell, Microsoft Learn — Windows Server
Часто задаваемые вопросы
Что такое Управление модулями PowerShell: установка, обновление и удаление для сисадмина?
Управление модулями PowerShell: установка, обновление и удаление для сисадмина — это важный аспект системного администрирования, который позволяет настроить и оптимизировать работу IT-инфраструктуры. В данной статье подробно рассматриваются все ключевые моменты.
Как правильно настроить Управление модулями PowerShell: установка, обновление и удаление для сисадмина?
Для корректной настройки Управление модулями PowerShell: установка, обновление и удаление для сисадмина необходимо следовать пошаговой инструкции, представленной в статье выше. Важно учитывать особенности вашей инфраструктуры и требования безопасности.
Какие типичные ошибки возникают при работе с Управление модулями PowerShell: установка, обновление и удаление для сисадмина?
Наиболее частые ошибки при работе с Управление модулями PowerShell: установка, обновление и удаление для сисадмина: некорректная конфигурация, недостаточные права доступа и несовместимость версий. Рекомендуем обратиться к специалистам ITFresh для профессиональной настройки.
ООО «АйТи Фреш» возьмёт это на себя
Не хватает времени или своих специалистов — мы настроим, оптимизируем и возьмём вашу IT-инфраструктуру на постоянное сопровождение. Работаем с юридическими лицами в Москве и регионах. Собственный дата-центр, команда из 8 серверов Dell Xeon Platinum 8280 на базе МТС.
Комментарии