О модулях
Краткое описание
Объясняет, как устанавливать, импортировать и использовать модули PowerShell.
Полное описание
Модуль — это пакет, содержащий команды PowerShell, такие как командлеты, поставщики, функции, рабочие процессы, переменные и псевдонимы.
Составляя команды, пользователи могут организовывать их с помощью модулей и передавать их другим пользователям. Пользователи, получающие модули, могут добавлять команды в модули в свои сеансы PowerShell и использовать их так же, как и встроенные команды.
В этом разделе объясняется, как использовать модули PowerShell. Сведения о том, как создавать модули PowerShell, см. в разделе написание модуля PowerShell.
Что такое модуль?
Модуль — это пакет команд. Все командлеты и поставщики в сеансе добавляются модулем или оснасткой.
Автоматическая загрузка модуля
Начиная с PowerShell 3,0, PowerShell автоматически импортирует модули при первом выполнении любой команды в установленном модуле. Теперь для использования команд в модуле не требуется выполнять установку или настройку профиля, поэтому необходимость управления модулями после их установки на компьютере отпадает.
Также упрощен поиск команд в модуле. Get-Command
Теперь командлет получает все команды во всех установленных модулях, даже если они еще не находятся в сеансе, поэтому можно найти команду и использовать ее без импорта.
В каждом из следующих примеров вызывается импорт модуля, содержащегося в Get-Mailbox
сеансе.
Выполните команду
Get-Mailbox -Identity Chris
Получение команды
Get-Command Get-Mailbox
Получение справки по команде
Get-Help Get-Mailbox
Get-Command
команды, содержащие подстановочный знак (*), считаются для обнаружения, не используют и не импортируют модули.
Автоматически импортируются только те модули, которые хранятся в расположении, указанном в переменной среды PSModulePath. Модули в других расположениях необходимо импортировать, выполнив Import-Module
командлет.
Кроме того, команды, использующие поставщики PowerShell, не импортируют модуль автоматически. Например, если вы используете команду, для которой требуется диск WSMan:, например Get-PSSessionConfiguration
командлет, может потребоваться выполнить Import-Module
командлет, чтобы импортировать модуль Microsoft. WSMan. Management , включающий WSMan:
диск.
Вы по-прежнему можете выполнить Import-Module
команду, чтобы импортировать модуль и использовать $PSModuleAutoloadingPreference
переменную для включения, отключения и настройки автоматического импорта модулей. Дополнительные сведения см. в разделе about_Preference_Variables.
Как использовать модуль
Чтобы воспользоваться модулем, выполните следующие действия.
- Установите модуль. (Обычно это выполняется автоматически.)
- Найдите команды, которые добавил модуль.
- Теперь вы можете использовать эти команды.
В данном разделе описано, как выполнить эти задачи. В нем также содержатся другие полезные сведения об управлении модулями.
Установка модуля
Если вы получаете модуль в качестве папки с файлами в нем, его необходимо установить на компьютере, прежде чем его можно будет использовать в PowerShell.
Обычно модули устанавливаются автоматически. PowerShell поставляется с несколькими предварительно установленными модулями, которые иногда называют "основными" модулями. На компьютерах под управлением Windows, если компоненты, включенные в операционную систему, имеют командлеты для управления ими, эти модули предварительно устанавливаются. При установке компонента Windows с помощью, например, мастера добавления ролей и компонентов в диспетчер сервера или в диалоговом окне Включение или отключение компонентов Windows на панели управления, устанавливаются все модули PowerShell, которые являются частью компонента. Многие модули поставляются с программой установки, выполняющей установку модуля.
Чтобы создать каталог modules для текущего пользователя, используйте следующую команду:
New-Item -Type Directory -Path $HOME\Documents\WindowsPowerShell\Modules
Полностью скопируйте папку модуля в каталог Modules. Для копирования папки можно использовать любой метод, в том числе проводник Windows и Cmd.exe, а также PowerShell. В PowerShell используйте Copy-Item
командлет. Например, чтобы скопировать папку MyModule из C:\ps-test\MyModule
в каталог modules, введите:
Copy-Item -Path C:\ps-test\MyModule -Destination `
$HOME\Documents\WindowsPowerShell\Modules
Установить модуль можно в любое местоположение, однако если всегда устанавливать их в местоположение модулей по умолчанию, ими проще управлять. Дополнительные сведения о расположениях модулей по умолчанию см. в разделе модули и расположения ресурсов DSC и PSModulePath .
Поиск установленных модулей
Чтобы найти модули, установленные в местоположении модулей по умолчанию, но еще не импортированные в сеанс, введите следующее:
Get-Module -ListAvailable
Чтобы найти модули, которые уже были импортированы в сеанс, в командной строке PowerShell введите следующую команду:
Get-Module
Дополнительные сведения о Get-Module
командлете см. в разделе Get-Module.
Как найти команды в модуле
Используйте Get-Command
командлет, чтобы найти все доступные команды. Параметры Get-Command
командлета можно использовать для фильтрации команд, таких как Module, Name и существительное.
Чтобы найти все команды в модуле, введите:
Get-Command -Module <module-name>
Например, чтобы найти команды в модуле BitsTransfer, введите:
Get-Command -Module BitsTransfer
Дополнительные сведения о Get-Command
командлете см. в разделе Get-Command.
Получение справки по командам в модуле
Если модуль содержит файлы справки для экспортируемых команд, то в Get-Help
командлете будут отображаться разделы справки. Используйте тот же Get-Help
Формат команды, который используется для получения справки по любой команде в PowerShell.
Начиная с PowerShell 3,0 можно скачать файлы справки для модуля и загрузить обновления в файлы справки, чтобы они никогда не были устаревшими.
Чтобы найти раздел справки по содержащимся в модуле командам, введите следующее:
Get-Help <command-name>
Чтобы получить справку в Интернете для команды в модуле, введите:
Get-Help <command-name> -Online
Чтобы скачать и установить файлы справки для команд в модуле, введите:
Update-Help -Module <module-name>
Дополнительные сведения см. в разделе Get-Help и Update-Help.
Импорт модуля
Может потребоваться выполнить импорт модуля или файла модуля. Импорт требуется, если модуль не установлен в расположениях, указанных в переменной среды PSModulePath , $env:PSModulePath
или модуль состоит из файла, такого как DLL или PSM1, вместо обычного модуля, который доставляется в виде папки.
Можно также импортировать модуль, чтобы можно было использовать параметры Import-Module
команды, такие как параметр prefix, который добавляет отличительный префикс к именам существительных всех импортированных команд или параметр NoClobber , который предотвращает добавление в модуль команд, которые скрывают или заменяют существующие команды в сеансе.
Чтобы импортировать модули, используйте Import-Module
командлет.
Чтобы импортировать модули в расположении PSModulePath в текущий сеанс, используйте следующий формат команды.
Import-Module <module-name>
Например, следующая команда импортирует модуль BitsTransfer в текущий сеанс.
Import-Module BitsTransfer
Чтобы импортировать модуль, не находящийся в местоположении по умолчанию, укажите в команде полный путь к папке этого модуля.
Например, чтобы добавить модуль 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.
Удаление модуля
Если удалить модуль, добавленные им команды удаляются из сеанса.
Чтобы удалить модуль из сеанса, используйте следующий формат команды:
Remove-Module <module-name>
Например, следующая команда удаляет модуль BitsTransfer из текущего сеанса.
Remove-Module BitsTransfer
Удаление модуля отменяет операцию импорта модуля. При этом установка модуля не отменяется. Дополнительные сведения см. в разделе Remove-Module.
Расположение модулей и ресурсов DSC, а PSModulePath
Ниже приведены расположения по умолчанию для модулей PowerShell. Начиная с версии PowerShell 4,0, с введением DSC появился новый модуль по умолчанию и папка ресурсов DSC. Дополнительные сведения о DSC см. в разделе about_DesiredStateConfiguration.
Системные модули System:
$PSHOME\Modules
или ($env:windir\System32\WindowsPowerShell\v1.0\Modules
) — это те, которые входят в состав Windows и PowerShell.Начиная с PowerShell 4,0, когда была введена настройка требуемого состояния PowerShell (DSC), ресурсы DSC, включенные в PowerShell, также хранятся в
$PSHOME\Modules
$PSHOME\Modules\PSDesiredStateConfiguration\DSCResources
папке.Текущий пользователь:
$HOME\Documents\WindowsPowerShell\Modules
($env:UserProfile\Documents\WindowsPowerShell\Modules
)или
$HOME\My Documents\WindowsPowerShell\Modules
($env:UserProfile\My Documents\WindowsPowerShell\Modules
)Это расположение для добавленных пользователем модулей до PowerShell 4,0.
В PowerShell 4,0 и более поздних выпусках PowerShell добавленные пользователем модули и ресурсы DSC хранятся в C:\Program Files\WindowsPowerShell\Modules
. Модули и ресурсы DSC в этом расположении доступны всем пользователям компьютера. Это изменение необходимо, так как модуль DSC работает как локальная система и не может получить доступ к путям для конкретного пользователя, таким как $home\Documents\WindowsPowerShell\Modules
.
Начиная с версии PowerShell 5,0, с добавлением модуля PowerShellGet, а также коллекция PowerShellами сообщества и ресурсов, созданных корпорацией Майкрософт, Install-Module
команда устанавливает модули и ресурсы DSC по C:\Program Files\WindowsPowerShell\Modules
умолчанию.
Примечание. чтобы добавить или изменить файлы в $env:Windir\System32
каталоге, запустите PowerShell с параметром "Запуск от имени администратора".
Вы можете изменить расположение модулей по умолчанию в системе, изменив значение переменной среды PSModulePath , $Env:PSModulePath
. Переменная среды PSModulePath моделируется в переменной среды PATH и имеет тот же формат.
Чтобы отобразить местоположения модулей по умолчанию, введите следующую команду:
$Env:PSModulePath
Чтобы добавить местоположение модулей по умолчанию, используйте следующий формат команды:
$Env:PSModulePath = $Env:PSModulePath + ";<path>"
Точка с запятой (;) в этой команде отделяет новый путь от предыдущего пути в списке.
Например, чтобы добавить C:\ps-test\Modules
каталог, введите:
$Env:PSModulePath + ";C:\ps-test\Modules"
При добавлении пути к PSModulePath Get-Module
Import-Module
команды также включают модули в этом пути.
Задаваемое значение влияет только на текущий сеанс. Чтобы сделать это изменение постоянным, добавьте команду в профиль PowerShell или используйте элемент система на панели управления, чтобы изменить значение переменной среды PSModulePath в реестре.
Кроме того, чтобы сделать это изменение постоянным, можно также использовать метод SetEnvironmentVariable класса System. Environment , чтобы добавить путь к переменной среды PSModulePath .
Дополнительные сведения о переменной PSModulePath см. в разделе about_Environment_Variables.
Конфликты модулей и имен
Конфликт имен происходит, когда в сеансе имеется несколько команд с одинаковым именем. При импорте модуля возникает конфликт имен, если содержащиеся в нем команды имеют такие же имена, как команды или элементы, уже имеющиеся в сеансе.
Конфликты имен могут возникать в результате скрытия или замены команд.
Скрытый
Скрытой называется команда, не выполняемая при вводе ее имени, но выполняемая другими способами (например, с указанием имени модуля или оснастки, из которой добавлена команда).
Замененный текст
Замененной называется команда, которую невозможно выполнить, поскольку поверх нее записана команда с таким же именем. Даже если удалить модуль, являющийся причиной конфликта, выполнить замененную команду можно только после перезапуска сеанса.
Import-Module
может добавлять команды, которые скрывают и заменяют команды в текущем сеансе. Кроме того, команды в текущем сеансе могут скрыть команды, добавленные модулем.
Чтобы обнаружить конфликты имен, используйте параметр ALL Get-Command
командлета. Начиная с PowerShell 3,0, Get-Command
получает только те команды, которые выполняются при вводе имени команды. Параметр ALL получает все команды с указанным именем в сеансе.
Чтобы предотвратить конфликты имен, используйте параметры NoClobber или prefix Import-Module
командлета. Параметр prefix добавляет префикс к именам импортированных команд, чтобы они были уникальными в сеансе. Параметр NoClobber не импортирует команды, которые скрывают или заменяют существующие команды в сеансе.
Можно также использовать параметры псевдонима, командлета, функциии переменной , Import-Module
чтобы выбрать только те команды, которые необходимо импортировать, а также исключить команды, вызывающие конфликты имен в сеансе.
Авторы модулей могут предотвратить конфликты имен, используя свойство DefaultCommandPrefix манифеста модуля для добавления префикса по умолчанию ко всем именам команд. Значение параметра prefix имеет приоритет над значением DefaultCommandPrefix.
Даже если команда скрыта, можно выполнить ее, указав (помимо ее имени) имя модуля или оснастки, из которой она добавлена.
Правила очередности команд PowerShell определяют, какие команды выполняются, когда сеанс включает команды с тем же именем.
Например, если сеанс включает функцию и командлет с тем же именем, по умолчанию PowerShell выполняет эту функцию. Если сеанс содержит команды одинакового типа (например, два командлета) с одинаковым именем, по умолчанию выполняется команда, добавленная последней.
Дополнительные сведения, включая описание правил приоритета и инструкции по выполнению скрытых команд, см. в разделе about_Command_Precedence.
Модули и оснастки
В сеанс можно добавлять команды из модулей и оснасток. модули могут добавлять все типы команд, в том числе командлеты, поставщики и функции, а также элементы, такие как переменные, псевдонимы и диски PowerShell. Из оснасток можно добавлять только командлеты и поставщики.
Прежде чем удалить модуль или оснастку из сеанса, с помощью следующих команд определите, какие команды будут при этом удалены
Чтобы найти источник командлета в сеансе, используйте следующий формат команды:
Get-Command <cmdlet-name> | Format-List -Property verb,noun,pssnapin,module
Например, чтобы найти источник Get-Date
командлета, введите:
Get-Command Get-Date | Format-List -Property verb,noun,module
Дополнительные сведения об оснастках PowerShell см. в разделе about_PSSnapins.
Предупреждения и ошибки, связанные с модулем
Команды, экспортируемые модулем, должны следовать правилам именования команд PowerShell. Если импортируемый модуль экспортирует командлеты или функции с неодобренными командами в именах, Import-Module
командлет выводит следующее предупреждающее сообщение.
ПРЕДУПРЕЖДЕНИЕ. Некоторые импортированные имена команд включают неутвержденные команды, которые могут сделать их менее обнаруживаемыми. Чтобы получить подробные сведения, используйте параметр Verbose, или введите Get-Verb, чтобы просмотреть список утвержденных команд.
Это сообщение является всего лишь предупреждением. Импорт осуществляется для всего модуля, включая недопустимые команды. Хотя это сообщение отображается для пользователей модуля, проблема с именованием должна быть устранена автором модуля.
Чтобы отключить предупреждающее сообщение, используйте параметр DisableNameChecking Import-Module
командлета.
Встроенные модули и оснастки
В PowerShell 2,0 и в более старых основных программах в PowerShell 3,0 и более поздних версиях основные команды, устанавливаемые с помощью PowerShell, упаковываются в оснастки, которые автоматически добавляются во все сеансы PowerShell.
Начиная с PowerShell 3,0, для ведущих программ, которые реализуют InitialSessionState.CreateDefault2
начальный API состояния сеанса, оснастка Microsoft. PowerShell. Core добавляется в каждый сеанс по умолчанию. Модули загружаются автоматически при первом использовании.
Примечание
Удаленные сеансы, включая сеансы, запущенные с помощью New-PSSession
командлета, — это сеансы предыдущих версий, в которых встроенные команды упаковываются в оснастки.
Следующие модули (или оснастки) устанавливаются с помощью PowerShell.
- Microsoft.PowerShell.Archive
- Microsoft.PowerShell.Core
- Microsoft.PowerShell.Diagnostics
- Microsoft.PowerShell.Host
- Microsoft.PowerShell.Management
- Microsoft.PowerShell.ODataUtils
- Microsoft.PowerShell.Security
- Microsoft.PowerShell.Utility
- Microsoft.WSMan.Management
- PackageManagement
- PowerShellGet
- PSDesiredStateConfiguration
- PSReadline
- PSScheduledJob
- PSWorkflow
- PSWorkflowUtility
- ISE
События модуля ведения журнала
Начиная с версии PowerShell 3,0 можно записывать события выполнения для командлетов и функций в модулях PowerShell и оснастках, установив свойство LogPipelineExecutionDetails модулей и оснасток в значение $True
.
Можно также использовать параметр групповая политика, включить ведение журнала модуля, чтобы включить ведение журнала модуля во всех сеансах PowerShell. Дополнительные сведения см. в разделе about_EventLogs и about_Group_Policy_Settings.
См. также
about_DesiredStateConfiguration