Как удалить модули PowerShell в Windows?

В этой статье рассмотрим, как корректно удалить установленные на компьютере PowerShell модули. Обычно это нужно, когда вы хотите очистить систему от старых или неиспользуемых версий модулей, ускорить время загрузки PowerShell, или удалить конфликтующие модули.

Вывести список сторонних PowerShell модулей, установленных на компьютере через зарегистрированные репозитории, можно с помощью команды:

Get-InstalledModule

Get-InstalledModule список установленных модулей из репозиторией

Эта команда выведет список всех штатно установленных и зарегистрированных сторонних PS модулей (установленных с помощью командлета Install-Module). В данном случае все модули установлены через репозиторий PSGallery.

Чтобы удалить один из установленных модулей, укажите его имя в команде Uninstall-Module. Например:

Uninstall-Module -Name PSWindowsUpdate

На компьютере может быть установлено несколько версий модуля. Командлет может как удалить самую последнюю версию модуля, так и упасть в ошибку, если було обнаружено несколько версий. Список доступных версий модуля можно вывести:

Get-Module pswindowsupdate -ListAvailable

Несколько версий PowerShell модулей на компьютере Get-Module pswindowsupdate -ListAvailable

Удалить определению версию:

Uninstall-Module -Name PSWindowsUpdate -RequiredVersion 2.2.1.5 -Verbose

Удалить все версии:

Uninstall-Module -Name PSWindowsUpdate -AllVersions

Через Invoke-Command можно удалить модули на удаленном компьютере:

Invoke-Command -ComputerName srv1 -ScriptBlock {Uninstall-Module PSWindowsUpdate -RequiredVersion 1.5.0 -Force -Verbose}

При удалении модуля может появится ошибка о том, что модуль используется:

WARNING: The version '2.2.1.5' of module 'PSWindowsUpdate' is currently in use. Retry the operation after closing the applications.
PackageManagement\Uninstall-Package : Module 'PSWindowsUpdate' is in currently in use or you don't have the required permissions.

Uninstall-Module

Чтобы удалить такой модуль, нужно закрыть сессию PowerShell, в которой он загружен (импортирован). Вывести список модулей, загруженных в текущую сессию:

Get-Module

Если нужно выгрузить модуль из памяти, не закрывая текущую консоль, выполните:

Remove-Module -Name PSWindowsUpdate

Remove-Module - выгрузить модуль из памяти

После этого попробуйте удалить модуль еще раз (в некоторых случая нужно добавить параметр -Force, однако его использование может быть вредным, т.к. может принудительное удаление может сломать зависимости других модулей):

Uninstall-Module -Name PSWindowsUpdate -Force

Если модуль, который вы хотите удалить загружается автоматически при старте PowerShell сессии (например, через файлы профилей PS1), можно удалить модуль, запустив PowerShell сессию без профиля:

Powershell.exe -NoProfile -Command "Uninstall-Module ImportExcel"

Полный список доступных PowerShell модулей на компьютере (как установленных через репозиторий, так и модулей установленных вручную) можно вывести так:

Get-Module -ListAvailable|select name,version,path

Список всех модулей PowerShell на компьютере: Get-Module -ListAvailabl

В столбце path указано расположение файлов модуля. В Windows PowerShell можно использовать (импортировать) модули, установленные (скопированные) в следующие директории:

C:\Users\%username%\Documents\WindowsPowerShell\Modules
C:\Program Files\WindowsPowerShell\Modules
C:\Windows\system32\WindowsPowerShell\v1.0\Modules

Этот список путей доступен в переменной окружения $env:PSModulePath:

Переменная окружения $env:PSModulePath

В PowerShell Core 7.x в переменной $env:PSModulePath дополнительно используются следующие пути:

c:\program files\windowsapps\microsoft.powershell_7.5.2.0_x64__8wekyb3d8bbwe\Modules
C:\Program Files\PowerShell\Modules
C:\program files\powershell\7\Modules

Список путей к модуля PowerShell Core 7.x

Т.к. у некоторых модулей при удалении могут остаться некоторый файлы, иногда дополнительно нужно еще очистить оставшиеся файлы в каталоге модуля. Например такой скрипт удалить модуль и очистит содержимое папки модуля, если она не пустая:

$Module = Get-Module ImportExcel -ListAvailable
Uninstall-Module $Module.Name -verbose
Remove-Item $Module.ModuleBase -Recurse -Force


Предыдущая статья Следующая статья


Комментариев: 0 Оставить комментарий

Оставить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *

Я не робот( Обязательно отметьте)