Установка PowerShell модулей без Интернета (офлайн)

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

Обычная установка PowerShell модулей в Windows

Если на компьютере есть доступ в интернет, установка PowerShell модуля сводится к запуску команды InstallModule с указанием имени нужного модуля. Например, для установки PowerShell модуля для взаимодействия с MS SQL Server, выполните:

Install-Module SqlServer

install-module команда powershell установки модуля онлайн

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

Get-PSRepository

Get-PSRepository список зарегистрированных репозиториев powershell в windows

Если 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 в psgallery

Офлайн установка 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

В доменной среде можно разместить репозиторий в общей сетевой папке, чтобы все сервера/рабочие станции Windows могли загружать из него пакеты. В этом случае путь к репозиотрию нужно указать в формате UNC: -SourceLocation \\srv1\psrepo  )

Вывести список доступных репозиториев:

Get-PSRepository

Register-PSRepository создать локальный репозиторий powershell

Установить модуль PowerShell из указанного локального репозитория:

Install-Module sqlserver -Repository myLocalPackages

Установить PowerShell модуль из локального репозитория

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

Get-InstalledModule

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

Копируем офлайн PowerShell модуль с другого компьютера

Другой способ установки PowerShell модуля на автономный компьютер (без доступа Интернет) заключается в установки и копировании его с другого компьютера-источника, на котором доступ в интернет не ограничен.

На компьютере должна быть установлена версия PowerShell не ниже 5.1:

$PSVersionTable.PSVersion

На компьютере с доступом к PSGallery проверьте, что модуль присутствует в репозитории:<
Find-Module –Name *SqlServer*| Select Name, Version, Repository

Find-Module PSGallery

Скачайте нужный вам модуль на ваш компьютер в указанный каталог:

Save-Module –Name SqlServer –Path C:\ps\

Save-Module - скачать powershell модуль из галереи скриптов на локальный диск

Теперь папку с модулем нужно скопировать на автономный компьютер, на котором вы хотите установит модуль. Куда нужно скопировать катало с модулем?

Модули PowerShell могут хранится в нескольких каталогах. Их список можно вывести с помощью команды:

$env:PSModulePath -split ";"

пути PSModulePath

Как вы видите, 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 .

скопировать каталог с модулем powershell на офлайн компьютер

В зависимости от настроек политики выполнения скриптов PowerShell, для использования командлетов из сторонних модулей может понадобится разрешить запуск локальных PS1/PSM1 скриптов:

Set-ExecutionPolicy RemoteSigned

Если используется политика Restricted , при запуске любого командлета из модуля появится ошибка Не удалось загрузить PowerShell модуль.

Проверьте, что модуль SQLServer теперь доступен:

Get-Module -Name SQLServer -ListAvailable

Get-Module

Каталог установки модуля можно получить так:

(Get-Module -ListAvailable SQLServer).path

Каталог в котором хранится модуль powershell

Выведите список доступных команд в модуле:

Get-Command -Module SQLServer

Аналогичным образом вы можете установить любой модуль. Я чаще всего использую этот способ для установки PowerShell модуля SQLServer, PSWindowsUpdate и PowerCLI для VMware.

Установка PowerShell модулей AzureAD и Exchange Online в офлайн системах по понятным причинам не имеет смысла.

Импорт 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 или не удалите модуль.

Для удаления PowerShell модуля с компьютера используется командлет Uninstall-Module .

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


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

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

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

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