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.
См. также
PowerShell