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

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

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

Обратите внимание, что на сайте PowershellGallery.com отсутствуют ссылки на загрузку модулей. Единственное, что вы можете загрузить с сайта это пакет NuGet (файл
.nupkg
). С помощью определенных манипуляций вы сможете установить PowerShell модуль из nupkg файла, но это будет не совсем полноценная установка модуля (основная проблема – не устанавливаются зависимости).

Модули POwerShell в psgallery

Ручная установка модуля 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:UsersrootDocumentsWindowsPowerShellModules (
    $HomeDocumentsPowerShellModules
    ) – модули в этом каталоге в доступны только данному пользователю (CurrentUser)
  • C:Program FilesWindowsPowerShellModules ($Env:ProgramFilesWindowsPowerShellModules) — путь используется при установке модуля для всех пользователей компьютера (-Scope AllUsers)
  • C:Windowssystem32WindowsPowerShellv1.0Modules (каталог для встроенных модулей по-умолчанию)

Скопируйте модуль в каталог
C:Program FilesWindowsPowerShellModules
.

скопировать каталог с модулем 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 модуля по сети с другого компьютера

Если вы не хотите устанавливать 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 FilesWindowsPowerShellModules
). Сами командлеты при этом не копируются.

Закройте сессию:

Remove-PSSession $session

Теперь чтобы использовать командлеты PowerShell из этого модуля достаточно импортировать его в сессию:

Import-Module RemSQLServer

Все командлеты модуля SQL теперь доступны без установки явного подключения к удаленному компьютеру. Попробуйте выполнить запрос к MS SQL с помощью Invoke-Sqlcmd. Все команды доступны пока вы не закроете консоль PowerShell или не удалите модуль.

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