about_Modules
Краткое описание
Сведения об установке, импорте и использовании модулей PowerShell.
Подробное описание
PowerShell — это язык сценариев и командная оболочка. Язык состоит из ключевых слов, которые обеспечивают структуру и логику обработки, а также команд, которые выполняют работу. Команды в PowerShell реализуются в виде скриптов, функций или командлетов.
Модуль — это автономная единица многократного использования, которая может содержать командлеты, поставщики, функции, переменные и другие типы ресурсов, которые можно импортировать как единое целое.
PowerShell поставляется с базовым набором модулей. При необходимости можно также установить дополнительные модули. По умолчанию установленные модули загружаются автоматически при первом использовании команды из модуля. $PSModuleAutoloadingPreference
Используйте переменную для включения, отключения и настройки автоматической загрузки модулей. Дополнительные сведения см. в разделе about_Preference_Variables.
Вы можете выгрузить или перезагрузить во время сеанса. Remove-Module
Используйте командлет , чтобы выгрузить модуль из сеанса. Import-Module
Используйте командлет для загрузки модуля.
Модули можно создавать как скомпилированные сборки .NET, написанные на C#, или модули на основе скриптов, написанные в 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\PowerShell\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
Prefix добавляет отличительный префикс в часть существительных командлетов, импортированных из модуля. Параметр 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
. Параметр Prefix добавляет префикс к именам импортированных команд, чтобы они были уникальными в сеансе. Параметр NoClobber не импортирует команды, которые скрывают или заменяют существующие команды в сеансе.
Вы также можете использовать параметры Import-Module
Alias, Cmdlet, Function и Variable для выбора только команд, которые требуется импортировать, и исключить команды, вызывающие конфликты имен в сеансе.
Авторы модулей могут предотвращать конфликты имен с помощью свойства DefaultCommandPrefix манифеста модуля, чтобы добавить префикс по умолчанию ко всем именам команд. Значение параметра Prefix имеет приоритет над значением DefaultCommandPrefix.