По умолчанию в Windows PowerShell модули устанавливаются в онлайн режиме из официального репозитория PowerShell Gallery (PSGallery) с помощью команды
Install-Module
. Однако, вы не сможете установить нужный модуль PowerShell, если ваш компьютер находится в изолированной от интернета сети или доступ к PSRepository ограничен. Или в сценарии с установкой модуля на on-prem серверах, на которых как правило заблокирован прямой доступ в интернет. В этой статье рассмотрим способы офлайн установки модулей PowerShell, а также возможности импорта установленного модуля с удаленного компьютера.
Обычная установка PowerShell модулей в Windows
Если на компьютере есть доступ в интернет, установка PowerShell модуля сводится к запуску команды Install—Module с указанием имени нужного модуля. Например, для установки PowerShell модуля для взаимодействия с MS SQL Server, выполните:
Install-Module SqlServer

Команда выполнит поиск указанного модуля в подключенных репозиториях. По умолчанию в Windows подключен только один онлайн репозиторий — PSGallery (https://www.powershellgallery.com/):
Get-PSRepository

Если PowerShell модуль найден, через провайдера NuGet из репозитория будет скачан установочный NuGet пакет с указанным модулем и будет выполнена его установка в системе.
Если компьютер находится в изолированной сети, при попутке установки модуля появится ошибка:
WARNING: Network connectivity may not be available, unable to reach remote sources. WARNING: Unable to bootstrap the required package provider due to problems with network connectivity. Please fix your network connection.
PowerShell модули в галерее PSGallery хранятся в формате NuGet (расширение
.nupkg
). Скачать вручную модуль можно только в таком упакованном формате .nupkg (вкладка Manual Download). По умолчанию Windows не умеет устанавливать PowerShell модули из nupkg файлов (можно распаковать этот файл и скопировать его содержимое в каталог моделей вручную, но это будет не совсем полноценная установка модуля — основная проблема, в том что при такой установке не будут установлены зависимости).

Офлайн установка PowerShell модулей из Nupkg пакетов
Рассмотрим, как корректно вручную установить PowerShell модуль из nupkg файла (формат NuGet). Идея этого метода в том, что вы можете зарегистрировать в системе локальный репозиторий NuGet в локальной папке, скопировать в него нужные nupkg пакеты с PowerShell модулями и выполнить установку пакета из локального репозитория с помощью стандартной команды
Install-Module
.
Создайте локальный каталог, который будет использоваться в качестве репозитория:
New-Item -Type Directory c:\LocalNugetRepo
Скачайте и скопируйте нужный пакет nupkg в эту директорию (в нашем примере это sqlserver.22.4.5.1.nupkg)
Регистрируем в Windows новый PowerShell репозиторий:
Register-PSRepository -Name myLocalPackages -SourceLocation C:\LocalNugetRepo -InstallationPolicy Trusted
-SourceLocation \\srv1\psrepo
)Вывести список доступных репозиториев:
Get-PSRepository

Установить модуль PowerShell из указанного локального репозитория:
Install-Module sqlserver -Repository myLocalPackages

Проверяем, что модуль успешно установлен:
Get-InstalledModule

Копируем офлайн PowerShell модуль с другого компьютера
Другой способ установки PowerShell модуля на автономный компьютер (без доступа Интернет) заключается в установки и копировании его с другого компьютера-источника, на котором доступ в интернет не ограничен.
$PSVersionTable.PSVersion
На компьютере с доступом к PSGallery проверьте, что модуль присутствует в репозитории:<
Find-Module –Name *SqlServer*| Select Name, Version, Repository

Скачайте нужный вам модуль на ваш компьютер в указанный каталог:
Save-Module –Name SqlServer –Path C:\ps\

Теперь папку с модулем нужно скопировать на автономный компьютер, на котором вы хотите установит модуль. Куда нужно скопировать катало с модулем?
Модули PowerShell могут хранится в нескольких каталогах. Их список можно вывести с помощью команды:
$env:PSModulePath -split ";"

Как вы видите, PowerShell модули могут хранится по одному из следующих путей:
- C:\Users\root\Documents\WindowsPowerShell\Modules (
$Home\Documents\PowerShell\Modules) – модули в этом каталоге в доступны только данному пользователю (CurrentUser) - C:\Program Files\WindowsPowerShell\Modules (
$Env:ProgramFiles\WindowsPowerShell\Modules) — каталог по-умолчанию при установке модуля для всех пользователей компьютера (-Scope AllUsers) - C:\Windows\system32\WindowsPowerShell\v1.0\Modules (каталог для встроенных модулей; не рекомендуется использовать для установки сторонних модулей)
Скопируйте модуль в каталог
C:\Program Files\WindowsPowerShell\Modules
.

Set-ExecutionPolicy RemoteSigned
Если используется политика
Restricted
, при запуске любого командлета из модуля появится ошибка Не удалось загрузить PowerShell модуль.
Проверьте, что модуль SQLServer теперь доступен:
Get-Module -Name SQLServer -ListAvailable

Каталог установки модуля можно получить так:
(Get-Module -ListAvailable SQLServer).path

Выведите список доступных команд в модуле:
Get-Command -Module SQLServer
Аналогичным образом вы можете установить любой модуль. Я чаще всего использую этот способ для установки PowerShell модуля SQLServer, PSWindowsUpdate и PowerCLI для VMware.
Импорт PowerShell модуля по сети с другого компьютера
Если вы не хотите устанавливать PowerShell модуль на всех компьютерах, вы можете импортировать любой модуль с другого компьютера по сети с помощью PSRemoting:
$session = New-PSSession -ComputerName msk-sql01
Вывести список установленных модулей на удаленном компьютере:
Get-Module -PSSession $session –ListAvailable
Импортировать указанный модуль на ваш компьютер:
Import-Module -PSsession $session -Name SqlServer
Не забудьте закрыть сессию после окончания:
Remove-PSSession $session
Еще более интересный способ локально использовать PowerShell модуль, установленный на удаленном компьютере через неявное удаленное управление (Implicit remoting).
Подключитесь к удалённому компьютеру через Invoke-Command и импортируйте нужный вам модуль PowerShell:
$session = New-PSSession -ComputerName msk-sql01
Invoke-Command {Import-Module SqlServer} -Session $session
Экспортируйте командлеты модуля из удаленной сессии в локальный модуль
Export-PSSession -Session $s -CommandName *-Sql* -OutputModule RemSQLServer -AllowClobber
Данная команда создаст на вашем компьютер новый PowerShell модуль RemSQLServer (в каталоге
C:\Program Files\WindowsPowerShell\Modules
). Сами командлеты при этом не копируются.
Закройте сессию:
Remove-PSSession $session
Теперь чтобы использовать командлеты PowerShell из этого модуля достаточно импортировать его в сессию:
Import-Module RemSQLServer
Все командлеты модуля SQL теперь доступны без установки явного подключения к удаленному компьютеру. Все команды доступны пока вы не закроете консоль PowerShell или не удалите модуль.
Uninstall-Module
.

Get-module ничего не выводит.
Можно экспортировать часть модулей с одного ПК на другой?
С импортом всё понятно.
ПРосто скопируйте папки с модулями с одного компьютера на другой и импортируйте их в сессию posh
Добавьте ещё такую вещь что после установки модуль может быть загружен, но в powershell отсутствовать, для этого надо:
1. В режиме администратора запустите PowerShell и выполните команду Set-ExecutionPolicy RemoteSigned
2. Подтвердите переключение — Y