Традиционный способ установки модуля в Windows — найти его в Интернете, затем загрузить и установить. Но в Windows Server 2016 этот способ управления модулями на машине был полностью изменён. Теперь он поставляется с встроенным в Windows PowerShell модулем PowershellGet. PowershellGet поможет вам найти, скачать, установить и управлять модулями на машине.
PowershellGet работает с несколькими поставщиками. Эти поставщики - клиентские инструменты, которые подключаются к представленному источником репозиторию модуля, (локация - URL). Наиболее важный работающий с Windows Server 2016 поставщик PowershellGet - это NuGet. NuGet — менеджер пакетов для Windows. Он обеспечивает возможность работы не только с модулями, но и с приложениями или пакетами. NuGet может работать с несколькими источниками, но PSGallery — наиболее простые и привилегированные источники репозитория для PowershellGet.
Все функциональные возможности модуля управления включены в модуль PowershellGet. Первым делом, для управления модулями, необходимо импортировать модуль в консоль Windows PowerShell. Чтобы сделать это, запустите Integrated Scripting Environment (ISE) Windows PowerShell и для загрузки модуля PowershellGet выполните следующую команду:
VERBOSE: Loading module from path PS C:\WINDOWS\system32> import-module PowerShellGet -Verbose
VERBOSE: Loading module from path 'C:\Program Files\WindowsPowerShell\Modules\PowerShellGet\1.0.0.1\PowerShellGet.psd1'.
VERBOSE: Loading 'FormatsToProcess' from path 'C:\Program Files\WindowsPowerShell\Modules\PowerShellGet\1.0.0.1\PSGet.Format.ps1xml'.
VERBOSE: Loading module from path 'C:\Program Files\WindowsPowerShell\Modules\PowerShellGet\1.0.0.1\PSModule.psm1'.
VERBOSE: Importing function 'Find-Command'.
VERBOSE: Importing function 'Find-DscResource'.
VERBOSE: Importing function 'Find-Module'.
VERBOSE: Importing function 'Find-RoleCapability'.
VERBOSE: Importing function 'Find-Script'.
VERBOSE: Importing function 'Get-InstalledModule'.
VERBOSE: Importing function 'Get-InstalledScript'.
VERBOSE: Importing function 'Get-PSRepository'.
VERBOSE: Importing function 'Install-Module'.
VERBOSE: Importing function 'Install-Script'.
VERBOSE: Importing function 'New-ScriptFileInfo'.
VERBOSE: Importing function 'Publish-Module'.
VERBOSE: Importing function 'Publish-Script'.
VERBOSE: Importing function 'Register-PSRepository'.
VERBOSE: Importing function 'Save-Module'.
VERBOSE: Importing function 'Save-Script'.
VERBOSE: Importing function 'Set-PSRepository'.
VERBOSE: Importing function 'Test-ScriptFileInfo'.
VERBOSE: Importing function 'Uninstall-Module'.
VERBOSE: Importing function 'Uninstall-Script'.
VERBOSE: Importing function 'Unregister-PSRepository'.
VERBOSE: Importing function 'Update-Module'.
VERBOSE: Importing function 'Update-ModuleManifest'.
VERBOSE: Importing function 'Update-Script'.
VERBOSE: Importing function 'Update-ScriptFileInfo'.
VERBOSE: Importing alias 'fimo'.
VERBOSE: Importing alias 'inmo'.
VERBOSE: Importing alias 'pumo'.
VERBOSE: Importing alias 'upmo'.
Использование переключателя Verbose с командлетом Import-Module отображает в консоли все импортированные функции, командлеты и алиасы. В этом модуле доступны восемь функций и две переменные четырёх алиасов.
При первом использовании командлета PowershellGet, он проверяет установку на машине NuGet. Если NuGet не установлен, появится диалоговое окно подтверждения со следующим содержанием:
Для взаимодействия с NuGet-базированными галереями, PowershellGet необходим NuGet_anycpu.exe. NuGet_anycpu.exe доступен в 'C:\ProgramData\OneGet\ProviderAssemblies' или 'C:\Users\<username>\AppData\Local\OneGet\ProviderAssemblies'.
Дополнительные сведения о NuGet, на http://www.nuget.org. Вы хотите, чтобы PowershellGet сейчас загрузил NuGet_anycpu.exe?
При нажатии кнопки Да на машине загружается и устанавливается NuGet.
Предоставляемые PowershellGet командлеты делятся на две большие категории: модули и командлеты репозитория. PowershellGet предоставляет командлеты для поиска, установки, публикации и обновления модулей из хранилища. А также он обеспечивает командлеты для чтения текущих настроек репозитория, обновления, регистрации и отмены их регистрации.
По умолчанию доступны два репозитория: PSGallery и MSPSGallery. PowershellGet для подключения к этим хранилищам использует NuGet. Запуск Get-PSRepository отображает все существующие на машине репозитории.
Запуск командлета Get-PSRepository с именем репозитория отображает конфигурацию этого репозитория.
На выходе, SourceLocation указывает URL-адрес репозитория, PackageManagementProvider идентифицирует, используемый для подключения к хранилищу пакет поставщика (в данном случае NuGet), Trusted указывает, является ли это хранилище надёжным, а PublishLocation показывает используемый для предоставления модулей URL-адрес.
Запуск командлета Set-PSRepository устанавливает значения конфигурации репозитория. Например, следующий командлет Set-PSRepository изменяет значение конфигурации для репозитория PSGallery с Untrusted на Trusted. После изменения значения, выполнив командлет Get-PSRepository, можно просмотреть новую конфигурацию.
Командлет Register-PSRepository используется для добавления и регистрации нового репозитория. Для правильной работы с репозиторием командлету требуется имя репозитория, для загрузки модулей его исходное местоположение, для публикации новых модулей в репозитории местоположение публикации, политика установки и диспетчер пакетов. Выполнение этого командлета с Chocolatey в качестве имени, http://chocolatey.org/api/v2/ как место источника и публикации, Trusted как значение политики установки, и NuGet в качестве диспетчера пакетов - добавляет на машину название нового модуля репозитория следующим образом:
После регистрации, командлет Find-Module может искать репозитории, а командлет Install-Module загружать и устанавливать модули. Chocolatey здесь приводится только в качестве примера. Это может быть любой репозиторий, хостинг модулей Windows PowerShell.
Запуск Unregister-PSRepository с параметром Name удаляет ранее зарегистрированный репозиторий.
Наиболее важной функцией модуля PowershellGet является поиск и установка модулей. Запуск командлета Find-Module без каких-либо параметров выводит все, доступные в рамках всех хранилищ, модули как показано здесь:
Запуск командлета Find-Module с параметром Name выводит связанные с этим именем модули.
Выполнение этого командлета с Bing в качестве значения параметра Name содержит сведения о Bing, как показано здесь:
Примечание. Параметр Name также принимает подстановочные знаки.
Командлет Find-Module принимает дополнительные параметры MinimumVersion и RequiredVersion. В то же время нельзя использовать их оба. Чтобы загрузить определённую версию, используйте параметр RequiredVersion. Чтобы загрузить самую последнюю версию, более новую или равную MinimumVersion, укажите MinimumVersion. Запуск командлета Find-Module с Bing в качестве значения для параметра Name и 4.0 в качестве значения для параметра MinimumVersion - находит модуль Bing 5.0.
Запуск командлета Find-Module с Bing в качестве значения для параметра Name и 4.0 как значение для параметра RequiredVersion - приводит к ошибке:
Однако при запуске командлета Find-Module с Bing в качестве значения параметра Name и 5.0 в качестве значения параметра RequiredVersion выводит полную информация о модуле Bing:
После нахождения соответствующих модулей, следующий шаг - установка модуля.
Специально для этой цели, PowershellGet предоставляет командлет Install-Module. Этот командлет очень похож на Find-Module. Он также, в качестве параметров принимает Name, RequiredVersion и MinimumVersion.
Следующий блок кода демонстрирует запуск Install-Module с параметром Name и переключателем Verbose. Вместе с параметром Name можно использовать MinimumVersion или RequiredVersion.
Обратите внимание, что последняя строка вывода данных свидетельствует о том, что модуль установлен. Кроме того, обратите внимание, что модули по умолчанию загружаются в папку: ProgramFiles\WindowsPowershell\Modules. Windows PowerShell использует эту папку для установки модулей.
На данный момент можно использовать модуль Bing, импортировав его в текущую рабочую среду Windows PowerShell с помощью командлета Import-Module. После первоначальной установки и запуска Update-Module, обновляются существующие модули.
Этот модуль принимает параметры Name и RequiredVersion, но не принимает параметр MinimumVersion, как показано здесь: