
Большинство популярных модулей PowerShell устанавливаются в режиме онлайн из официальной галереи PowerShell (PSGallery
) репозитория с помощью Install-Module команда. Однако вы не сможете установить модуль PowerShell, если ваш компьютер находится в изолированной сети или прямой доступ к PSRepository ограничен. То же самое происходит, когда вы пытаетесь установить модуль PowerShell на хосты Windows Server, на которых прямой доступ в Интернет обычно заблокирован. В этой статье мы покажем, как устанавливать модули PowerShell в автономном режиме и импортировать модуль с удаленного компьютера (например, при использовании модуля PoSh для управления SQLServer).
Обратите внимание, что прямых ссылок для загрузки модулей с PowershellGallery.com не существует. Единственное, что вы можете скачать с сайта, — это пакет NuGet (a .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\username\Documents\WindowsPowerShell\Modules
($Home\Documents\PowerShell\Modules
) — модули PowerShell в этой папке доступны только этому пользователю (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
Таким же образом можно установить любой модуль. Я часто использую этот метод для установки модулей SQLServer, PSWindowsUpdate или PowerCLI for VMware.
Импорт модуля PowerShell с удаленного компьютера
Если вы не хотите устанавливать модуль PowerShell на все компьютеры, вы можете импортировать любой модуль с удаленного компьютера с помощью PSRemoting:
$session = New-PSSession -ComputerName dub-sql1
Чтобы отобразить список модулей, установленных на удаленном компьютере:
Get-Module -PSSession $session –ListAvailable
Чтобы импортировать указанный модуль PowerShell на свой компьютер:
Import-Module -PSsession $session -Name SqlServer
Не забудьте закрыть сеанс по завершении работы:
Remove-PSSession $session
Еще один интересный способ локального использования модуля PowerShell, установленного на удаленном компьютере, через Неявное удаленное использование.
Подключитесь к удаленному компьютеру с помощью команды Invoke-Command и импортируйте нужный вам модуль PowerShell:
$session = New-PSSession -ComputerName dub-sql1
Invoke-Command {Import-Module SqlServer} -Session $session
Экспортируйте команды модуля из удаленной сессии в локальный модуль:
Export-PSSession -Session $s -CommandName *-Sql* -OutputModule RemoteSQLServer -AllowClobber
Команда создает новый модуль RemoteSQLServer PowerShell на вашем компьютере (в C:\Program Files\WindowsPowerShell\Modules). Сами файлы команд не копируются.
Закройте сессию:
Remove-PSSession $session
Затем, чтобы использовать команды PowerShell из этого модуля, нужно просто импортировать их в сеанс:
Import-Module RemoteSQLServer
Все команды модуля SQL будут доступны без установки явного соединения с удаленным компьютером. Попробуйте выполнить запрос к базе данных MS SQL с помощью команды Invoke-Sqlcmd
команду. Все команды MSSQL будут доступны до тех пор, пока вы не закроете консоль PowerShell или не удалите модуль.