Большинство популярных модулей PowerShell устанавливаются в онлайн режиме из официального репозитория PowerShell Gallery (PSGallery) с помощью команды
Install-Module
. Однако, вы не сможете установить нужный модуль PowerShell, если ваш компьютер находится в изолированной от интернета сети или доступ к PSRepository ограничен. Или в сценарии с установкой модуля на сервере, на которых как правило заблокирован прямой доступ в интернет. В этой статье рассмотрим способ офлайн установки модулей PowerShell и импорта модуля с удаленного компьютера на примере модуля для управления SQLServer.
Обратите внимание, что на сайте PowershellGallery.com отсутствуют ссылки на загрузку модулей. Единственное, что вы можете загрузить с сайта это пакет NuGet (файл
.nupkg
). С помощью определенных манипуляций вы сможете установить PowerShell модуль из nupkg файла, но это будет не совсем полноценная установка модуля (основная проблема – не устанавливаются зависимости).
Ручная установка модуля 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
.
Проверьте, что модуль 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 теперь доступны без установки явного подключения к удаленному компьютеру. Попробуйте выполнить запрос к MS SQL с помощью Invoke-Sqlcmd. Все команды доступны пока вы не закроете консоль PowerShell или не удалите модуль.