Поделиться через


about_Modules

Краткое описание

Описание установки, импорта и использования модулей PowerShell.

Подробное описание

PowerShell — это командная оболочка и язык сценариев. Команды в PowerShell реализуются как скрипты, функции или командлеты. Язык содержит ключевые слова, которые предоставляют структуру и логику обработки, а также другие ресурсы, такие как переменные, поставщики, псевдонимы.

Модуль является автономной, многократно используемой единицей, которая может включать командлеты, поставщики, функции, переменные и другие ресурсы, которые можно импортировать в сеанс PowerShell или любую пользовательскую программу PowerShell.

Прежде чем использовать функциональные возможности, содержащиеся в модуле, модуль должен быть загружен в сеанс PowerShell. По умолчанию PowerShell автоматически загружает установленный модуль при первом использовании команды из модуля. Вы можете настроить автоматическое поведение загрузки модуля с помощью переменной $PSModuleAutoloadingPreference. Дополнительные сведения см. в about_Preference_Variables.

Вы также можете вручную выгрузить или перезагрузить модули во время сеанса PowerShell. Чтобы выгрузить модуль, используйте Remove-Module командлет. Чтобы загрузить или перезагрузить модуль, используйте Import-Module.

PowerShell поставляется с базовым набором модулей. Любой пользователь может создавать новые команды PowerShell или другие ресурсы и публиковать их в виде модулей, которые пользователи могут устанавливать по мере необходимости.

Модули можно написать в C# как скомпилированные сборки .NET, известные как собственные модули или в обычной версии PowerShell, известные как модули скриптов. В этом разделе объясняется, как использовать модули PowerShell. Сведения о создании модулей PowerShell см. в статье "Написание модуля PowerShell".

Примечание.

До PowerShell 3.0 командлеты и поставщики были упаковываются в оснастки PowerShell. Начиная с PowerShell 3.0, оснастка Microsoft.PowerShell.Core добавляется в каждый сеанс по умолчанию. Это единственная оснастка, оставшаяся в PowerShell. Все остальные оснастки были преобразованы в модули. Создание новых оснастки больше не поддерживается.

Установка опубликованного модуля

Опубликованный модуль — это модуль, доступный из зарегистрированного репозитория, например коллекция PowerShell. Модули PowerShellGet и Microsoft.PowerShell.PSResourceGet предоставляют командлеты для поиска, установки и публикации модулей PowerShell в зарегистрированном репозитории.

Модуль PowerShellGet входит в состав PowerShell 5.0 и более поздних выпусков. Модуль Microsoft.PowerShell.PSResourceGet входит в состав PowerShell 7.4 и более поздних выпусков. Microsoft.PowerShell.PSResourceGet является новым предпочтительным диспетчером пакетов для PowerShell и может быть установлен на предыдущих версиях PowerShell. Install-Module Используйте командлет для Install-PSResource установки модулей из коллекция PowerShell.

 Get-Command Install-Module, Install-PSResource
CommandType  Name                Version    Source
-----------  ----                -------    ------
Function     Install-Module      2.9.0      PowerShellGet
Cmdlet       Install-PSResource  1.0.0      Microsoft.PowerShell.PSResourceGet

Дополнительные сведения см. в разделе "Обзор PowerShellGet".

Установка модуля вручную

Если вы получаете модуль в виде папки с файлами в нем, необходимо установить его на компьютере, прежде чем использовать его в PowerShell.

PowerShell поставляется с несколькими предварительно установленными модулями. На компьютерах под управлением Windows многие функции Windows включают модули для управления функцией. Эти модули устанавливаются при установке компонента. Другие модули могут быть установлены в установщике или программе установки, которая устанавливает модуль.

По умолчанию Modules папка для текущего пользователя не существует. Если вы установили модуль в CurrentUser области или Install-Module Install-PSResourceэти командлеты создают папку Modules для текущего пользователя. Если папка не существует, ее можно создать вручную.

Используйте следующую команду, чтобы создать папку Modules для текущего пользователя:

$folder = New-Item -Type Directory -Path $HOME\Documents\WindowsPowerShell\Modules

Скопируйте всю папку модуля в созданную папку. В PowerShell используйте Copy-Item командлет. Например, выполните следующую команду, чтобы скопировать MyModule папку из C:\PSTest только что созданной папки:

Copy-Item -Path C:\PSTest\MyModule -Destination $folder

Установить модуль можно в любое местоположение, однако если всегда устанавливать их в местоположение модулей по умолчанию, ими проще управлять. Дополнительные сведения о расположениях модулей по умолчанию см. в about_PSModulePath.

Автоматическая загрузка модуля

При первом выполнении команды из установленного модуля PowerShell автоматически импортирует (загружает) этот модуль. Модуль должен храниться в расположениях, указанных в переменной $env:PSModulePath среды. Модули в других расположениях должны импортироваться с помощью командлета Import-Module .

Автоматическая загрузка модуля позволяет использовать команды в модуле без настройки или настройки профиля. После установки модулей на компьютере нет необходимости управлять ими.

Каждый из следующих примеров приводит к импорту модуля CimCmdlets , содержащегося Get-CimInstanceв сеансе.

  • Выполнение команды

    Get-CimInstance Win32_OperatingSystem
    
  • Получение команды

    Get-Command Get-CimInstance
    
  • Получение справки по команде

    Get-Help Get-CimInstance
    

Вы можете использовать Get-Command список командлетов во всех установленных модулях, даже если они еще не в сеансе. При использовании Get-Command с подстановочным символом (*), PowerShell не импортирует модули. Для обнаружения команд можно использовать подстановочные знаки без загрузки модулей, которые могут не потребоваться в сеансе.

Кроме того, команды, использующие поставщики PowerShell, не импортируют модуль автоматически. Например, если вы используете команду, требующую WSMan: диск, например Get-PSSessionConfiguration командлет, может потребоваться выполнить Import-Module командлет для импорта модуля Microsoft.WSMan.Management , включающего WSMan: диск.

Импорт модуля вручную

Импорт модуля вручную требуется, если модуль не установлен в расположениях, указанных $env:PSModulePath переменной среды, или когда модуль предоставляется как автономный .dll или .psm1 файл, а не упакованный модуль.

Кроме того, может потребоваться изменить способ импорта модуля в сеансе. Например, параметр Import-Module префикса добавляет отличительный префикс в часть существительных командлетов, импортированных из модуля. Параметр NoClobber запрещает модулю добавлять команды, которые будут скрывать или заменять существующие команды в сеансе. Дополнительные сведения см. в разделе "Управление конфликтами имен".

Вы можете импортировать модуль, установленный в вашем $env:PSModulePath приложении, указав имя модуля. Например, следующая команда импортирует модуль BitsTransfer в текущий сеанс.

Import-Module BitsTransfer

Чтобы импортировать модуль, который не имеется, $env:PSModulePathиспользуйте полный путь к папке модуля. Например, чтобы добавить модуль TestCmdlets в каталог в C:\ps-test сеанс, введите:

Import-Module C:\ps-test\TestCmdlets

Чтобы импортировать файл модуля, который не содержится в папке модуля, используйте полный путь к файлу модуля в команде. Например, чтобы добавить модуль TestCmdlets.dll в каталог в C:\ps-test сеанс, введите следующее:

Import-Module C:\ps-test\TestCmdlets.dll

Дополнительные сведения о добавлении модулей в сеанс см. в разделе Import-Module.

Импорт модуля в начале каждого сеанса

Команда Import-Module импортирует модули в текущий сеанс PowerShell. Чтобы импортировать модуль в каждый начальный сеанс PowerShell, добавьте Import-Module команду в профиль PowerShell.

Дополнительные сведения о профилях см. в about_Profiles.

Поиск установленных модулей

Командлет Get-Module получает модули PowerShell, импортированные в сеансе.

Get-Module

Перечисленные модули могут включать модули, импортированные из любого расположения, а не только из $env:PSModulePath.

Используйте следующую команду для перечисления модулей, установленных в :$env:PSModulePath

Get-Module -ListAvailable

Эта команда получает все модули, установленные в $env:PSModulePath, а не только модули, импортированные в текущий сеанс. Эта команда не выводит список модулей, установленных в других расположениях.

Дополнительные сведения см. в разделе Get-Module.

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

Get-Command Используйте командлет для поиска всех доступных команд. Параметры командлета Get-Command можно использовать для фильтрации таких команд, как модуль, имя и существительное.

Чтобы найти все команды в модуле, введите следующее:

Get-Command -Module <module-name>

Например, чтобы найти команды в модуле BitsTransfer , введите:

Get-Command -Module BitsTransfer

Дополнительные сведения о командлете Get-Command см. в разделе Get-Command.

Удаление модуля

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

Remove-Module BitsTransfer

Удаление модуля отменяет операцию импорта модуля. Удаление модуля не удаляет модуль. Дополнительные сведения см. в разделе Remove-Module.

Команды можно добавить в сеанс из модулей и оснастки. Модули могут добавлять все типы команд, включая командлеты, поставщики и функции, а также элементы, такие как переменные, псевдонимы и диски PowerShell. Из оснасток можно добавлять только командлеты и поставщики.

Перед удалением модуля из сеанса используйте следующие команды, чтобы определить, какой модуль нужно удалить.

Например, используйте следующую команду, чтобы найти источник Get-Date командлетов и Get-Help командлетов:

Get-Command Get-Date, Get-Help -All |
    Select-Object -Property Name, CommandType, Module ,PSSnapIn

В следующих выходных данных показано, что Get-Help командлет находится в оснастке Microsoft.PowerShell.Core . Эту оснастку нельзя удалить из сеанса.

Name     CommandType Module                       PSSnapIn
----     ----------- ------                       --------
Get-Date    Function
Get-Date      Cmdlet Microsoft.PowerShell.Utility
Get-Help      Cmdlet                              Microsoft.PowerShell.Core

Существует два источника для Get-Date. Одна из них — это функция, а другая — командлет в модуле Microsoft.PowerShell.Utility . Вы можете удалить модуль с помощью Remove-Module. Чтобы удалить функцию, ее можно удалить с Function: диска.

Remove-Item Function:Get-Date

Дополнительные сведения о диске см. в Function: about_Function_Provider.

Управление конфликтами имен

Конфликт имен происходит, когда в сеансе имеется несколько команд с одинаковым именем. При импорте модуля возникает конфликт имен, если содержащиеся в нем команды имеют такие же имена, как команды или элементы, уже имеющиеся в сеансе.

Import-Module может добавлять команды, которые скрывают и заменяют команды в текущем сеансе. Конфликты имен могут возникать в результате скрытия или замены команд. Замена команд возникает, когда импортированный модуль содержит команду с тем же именем, что и существующая команда в сеансе. Недавно импортированная команда заменяет приоритет над существующей командой.

Например, если сеанс включает функцию и командлет с тем же именем, PowerShell выполняет функцию по умолчанию. Если сеанс содержит команды одинакового типа (например, два командлета) с одинаковым именем, по умолчанию выполняется команда, добавленная последней.

Дополнительные сведения, включая описание правил приоритета и инструкций по выполнению скрытых команд, см . в about_Command_Precedence.

Вы можете выполнить команду, которая была скрыта или заменена, указав имя команды. Чтобы указать имя команды, добавьте имя модуля, чем содержит нужную версию команды. Например:

Microsoft.PowerShell.Utility\Get-Date

Выполнение Get-Date с префиксом имени модуля гарантирует, что версия выполняется из модуля Microsoft.PowerShell.Utility .

Чтобы обнаружить конфликты имен, используйте параметр All командлета Get-Command . По умолчанию Get-Command получает только те команды, которые выполняются при вводе имени команды. Параметр All получает все команды с определенным именем в сеансе.

Чтобы предотвратить конфликты имен, используйте параметры NoClobber или Префикса командлетаImport-Module. Параметр Префикса добавляет префикс в имена импортированных команд, чтобы они были уникальными в сеансе. Параметр NoClobber не импортирует какие-либо команды, которые будут скрывать или заменять существующие команды в сеансе.

Вы также можете использовать параметры Import-Module псевдонима, командлета, функции и переменной, чтобы выбрать только команды, которые требуется импортировать, и вы можете исключить команды, вызывающие конфликты имен в сеансе.

Авторы модулей могут предотвратить конфликты имен с помощью свойства DefaultCommandPrefix манифеста модуля, чтобы добавить префикс по умолчанию ко всем именам команд. Значение параметра Префикса имеет приоритет над значением DefaultCommandPrefix.

См. также