Установка и управление модулями PowerShell
- Что такое модуль PowerShell?
- Различные типы модулей PowerShell
- Где хранятся модули PowerShell
- Установка модулей PowerShell
- Как обновить существующие модули
- Как сохранить модули PowerShell
- Удаленное использование модуля с другого компьютера
- Как удалить модуль PowerShell
- Где найти сторонние модули и скрипты PowerShell?
Добрый день! Уважаемые читатели и гости одного из крупнейших IT блогов в рунете Pyatilistnik.org. Ранее я вас научил производить установку Windows 11, показал где брать установочный образ. В данной новой ОС есть много новых командлетов PowerShell и еще больше дополнительных модулей, расширяющих функционал. Сегодня я вам покажу, как устанавливать и управлять модулями PowerShell, как их сохранять и переносить на другой компьютер. Думаю, что многие из вас найдут для себя много полезной информации.
Что такое модуль PowerShell?
Модуль PowerShell — это совокупность функций PowerShell или сгруппированного кода, сосредоточенного вокруг общей основной темы. Все командлеты и поставщики PowerShell добавляются модулем или оснасткой.
Получатели этих модулей могут добавлять команды, содержащиеся в модуле, в свои сеансы PowerShell, чтобы использовать их как встроенные команды. Чтобы успешно сориентировать все функции в модуле вокруг одной и той же концепции, необходимо следовать некоторым рекомендациям, таким как отношения подсказок имен. напр. модуль Active Directory содержит функции, которые так или иначе взаимодействуют с Active Directory. Кроме того, все существительные в именах функций начинаются с AD, поэтому определенные функции легче обнаружить с организованной структурой имени.
Различные типы модулей PowerShell
Существует 4 различных типа модулей PowerShell:
- Скриптовые модули — Самый распространенный тип модуля, не требующий знания C#, в основном любые файлы PSM1, содержащие в основном функции и код, используемые разработчиками скриптов и администраторами.
- Бинарные модули — Содержат скомпилированный код на основе сборки .NET Framework (DLL), используемый разработчиками командлетов для создания модулей, содержащих командлеты, поставщиков и т. д.
- Модули манифеста - Скриптовые модули, содержащие манифест, например, с информацией об авторе и т. д.
- Динамические модули — Специальный тип модуля, который никогда не записывается на диск и существует только в памяти. Элементы динамического модуля (функции/переменные) сразу же доступны в сеансе PowerShell, пока сеанс не будет закрыт.
Где хранятся модули PowerShell
Для того чтобы найти у себя в системе место хранения модулей PowerShell, вам нужно воспользоваться командой:
$env:PSModulePath
- C:\Windows\System32\WindowsPowerShell\v1.0\Modules
- C:\Program Files\WindowsPowerShell\Modules (По умолчанию все установленные модули для всех пользователей помещаются в папку модуля)
- C:\Program Files (x86)\VMware\Infrastructure\PowerCLI\Modules
- C:\Users\Имя пользователя\Documents\WindowsPowerShell\modules (Например в случае с PSTerminalServices)
Установка модулей PowerShell
Установка модулей очень простой процесс. Чтобы найти установленные, но еще не запущенные модули, запустите теперь известную команду Get-Module -ListAvailable.
Чтобы получить список только импортированных модулей в текущем сеансе, просто запустите Get-Module.
Далее при наличии на компьютере интернета произведем поиск нужного модуля, например VMware.PowerCLI. Для этого есть командлет Find-Module. Выполним команду:
Find-Module -Name VMware.PowerCLI
Можно найти модули с похожими именами. например все, что связано с Vmware.
Find-Module -Name VMware*
Можно найти модуль по минимальной версии или по конкретной версии.
Find-Module -Name VMware.PowerCLI -MinimumVersion 12.5.0.19195797
Find-Module -Name VMware.PowerCLI -RequiredVersion 12.5.0.19195797
Дополнительные ключи смотрите по ссылке - https://docs.microsoft.com/en-us/powershell/module/powershellget/find-module?view=powershell-7.2.
Далее найдя нужный модуль, установим его, выполните команду.
Install-Module -Name VMware.PowerCLI
Еще можно объединять команды:
Find-Module -Name VMware.PowerCLI -MinimumVersion 12.5.0.19195797 | Install-Module
Дополнительные ключи смотрите по ссылке - https://docs.microsoft.com/en-us/powershell/module/powershellget/install-module?view=powershell-7.2
Как обновить существующие модули
Всегда старайтесь держать свежие версии установленных модулей. Чтобы быстро произвести обновление вам поможет простая конструкция команд:
Get-InstalledModule | Update-Module -Force -Confirm:$false
Чтобы обновить конкретный модуль введите такую команду:
Update-Module -Name PSPKI -Force -Confirm:$false
Иногда может выскакивать ошибка:
PS C:\WINDOWS\system32> Update-Module -Name PSPKI -Force -Confirm:$false PackageManagement\Install-Package : Издатель Authenticode "CN=DigiCert Trusted Root G4, OU=www.digicert.com, O=DigiCert Inc, C=US" нового модуля "PSPKI" с версией "4 .3.0" не совпадает с издателем Authenticode "CN=Sectigo Public Code Signing Root R46, O=Sectigo Limited, C=GB" из ранее установленного модуля "PSPKI" с версией "4.2. 0".
Если вы по-прежнему хотите установить или обновить этот модуль, используйте параметр "-SkipPublisherCheck". C:\Program Files\WindowsPowerShell\Modules\PowerShellGet\1.0.0.1\PSModule.psm1:2089 знак:20 + ... $sid = PackageManagement\Install-Package @PSBoundParameters + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + CategoryInfo : InvalidOperation: (Microsoft.Power....InstallPackage:InstallPackage) [Install-Package], Exception + FullyQualifiedErrorId : AuthenticodeIssuerMismatch,Validate-ModuleAuthenticodeSignature,Microsoft.PowerShell.PackageManagement.Cmdlets.InstallPackage
тут можно выкрутиться таким методом:
Install-Module -Name PSPKI -Force -AllowClobber -SkipPublisherCheck
Как сохранить модули PowerShell
Бывают ситуации, когда у вас в системе нет интернета, а необходимость в модуле есть. Тут можно перенести заранее сохраненные модули на такую автономную системы, через флешку, или копирование по сети. Но для начала их нужно сохранить, для этого вы можете выполнить такую команду:
Save-Module -Name xRobocopy,Pscx -Path C:\Temp\Module-PowerShell
После переноса не забываем импортировать модуль, и если потребуется, то подкрутить политику ExecutionPolicy. Чтобы импортировать удаленный модуль, сначала необходимо создать PSSession (через New-PSSession ). Следующим шагом является импорт модуля, доступного на удаленном устройстве.
Import-Module -Name ActiveDirectory -PSSession $AdminServer -Prefix ‚Rmt')
Чтобы удалить модуль, команда Remove-Module выполняет эту работу. После удаления все команды, которые когда-то был добавлен модулем, удаляются из сеанса, это работает как реверсия импорта модуля. Обратите внимание, что из локальной сессии будет удален только модуль, но без удаления файлов модуля.
Мне удобнее иметь всегда под рукой скрипт, который берет все установленные модули по стандартному пути, архивирует их в zip-архивы и копирует в нужный каталог.
# Тут задается стандартный путь к папке с модулями PowerShell
$sourceFolder = "C:\Program Files\WindowsPowerShell\Modules"# Тут задается путь для сохранения ZIP-архивов
$destinationFolder = "C:\Temp\Powershell"# Проверяем существование исходной папки
if (-not (Test-Path -Path $sourceFolder -PathType Container)) {
Write-Error "Папка с модулями $sourceFolder не существует!"
exit 1
}# Создаем папку для архивов, если ее нет
if (-not (Test-Path -Path $destinationFolder -PathType Container)) {
New-Item -Path $destinationFolder -ItemType Directory -Force | Out-Null
}# Получаем список всех подпапок (модулей)
$modules = Get-ChildItem -Path $sourceFolder -Directory# Для каждой папки создаем ZIP-архив
foreach ($module in $modules) {
$moduleName = $module.Name
$modulePath = $module.FullName
$zipPath = Join-Path -Path $destinationFolder -ChildPath "$moduleName.zip"# Проверяем, не существует ли уже ZIP-архив
if (Test-Path -Path $zipPath) {
Write-Warning "ZIP-архив $zipPath уже существует - перезаписываем"
Remove-Item -Path $zipPath -Force
}Write-Host "Архивируем модуль $moduleName..."
try {
Compress-Archive -Path $modulePath -DestinationPath $zipPath -CompressionLevel OptimalWrite-Host "Успешно создан архив: $zipPath" -ForegroundColor Green
}
catch {
Write-Error "Ошибка при архивации $moduleName : $_"
}
}Write-Host "Архивация модулей завершена! Архивы сохранены в $destinationFolder" -ForegroundColor Cyan
Удаленное использование модуля с другого компьютера
Вам никто не мешает создать некий такой репозиторий модулей PowerShell на отдельной виртуальной машине и обращаться к ним удаленно. Установим для начала сессию с удаленным компьютером.
$session = New-PSSession -ComputerName w10-module
Удостоверимся, что на удаленном сервере есть нужные нам модули, через команду:
Get-Module -PSSession $session –ListAvailable
импортируем теперь в свою текущую сессию нужный модуль с удаленного сервера:
Import-Module -PSsession $session -Name VMware.PowerCLI
После завершите сеанс, когда закончите:
Remove-PSSession $session
Еще можно использовать командлет Invoke-Command. Тут вы подключаетесь к удаленному серверу и импортируете модуль.
$session = New-PSSession -ComputerName w10-module
Invoke-Command {Import-Module VMware.PowerCLI} -Session $session
Сохраним на локальный компьютер нужный нам модуль.
Export-PSSession -Session $s -CommandName *-PowerCLI* -OutputModule RemSQLServer -AllowClobber
Данная команда создаст на вашем компьютере новый PowerShell модуль VMware.PowerCLI (в каталоге C:\Program Files\WindowsPowerShell\Modules ). Сами командлеты при этом не копируются. Далее закройте сессию.
Remove-PSSession $session
Теперь его можно локально импортировать и использовать.
Как удалить модуль PowerShell
Для удаления модуля со всеми файлами есть командлет Uninstall-Module. Выполните команду:
Uninstall-Module -Name xRobocopy
Вы можете увидеть, что у одного модуля может быть несколько версий:
Get-InstalledModule -Name Posh-SSH -AllVersions | Sort-Object Version -Descending
Удаляем все версии для конкретного модуля кроме последней версии:
$moduleName = "Posh-SSH"
$versions = Get-InstalledModule -Name $moduleName -AllVersions | Sort-Object Version -Descending$versions | Select-Object -Skip 1 | ForEach-Object {
Uninstall-Module -Name $moduleName -RequiredVersion $_.Version -Force
}
Где найти сторонние модули и скрипты PowerShell?
Помимо предустановленных модулей самой Windows PowerShell, существует огромное количество сторонних модулей. Для поиска конкретных модулей я рекомендую PowerShellGallery. Он функционирует как центральный репозиторий для обмена и получения кода PoSh, такого как модули, скрипты и многое другое. В основном они распространяются через PSRepository, которые обычно представляют собой веб-серверы, на которых можно публиковать файлы, тогда как эти PSRepos можно размещать у себя или использовать с помощью онлайн-опций, таких, как PowerShellGallery. Get-PSRepository откроет список доступных PSRepositories, помеченных информацией о том, публикует ли источник код, одобренный Microsoft или нет (trusted/untrusted). Чтобы изменить состояние доверия PowerShellGallery, например, используйте:
Get-PSRepository -Name PSGallery | Set-PSRepository -InstallationPolicy Trusted
На этом у меня все. Мы с вами разобрали полный цикл управления модулями PowerShell. С вами был Иван Сёмин. автор и создатель IT портала Pyatilistnik.org.
Здравствуйте, Иван!
Подскажите, пожалуйста, как установить модуль для работы с VK api?
Скачал vkapi.wrapper.1.2.5.nupkg, а как с ним поступить правильно — не ясно.
Заранее спасибо за подсказку!
Можно экспортировать часть модулей с одного ПК на другой?
С импортом всё понятно.
Да можно