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


О модулях

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

Объясняет, как устанавливать, импортировать и использовать модули 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.

Как использовать модуль

Чтобы воспользоваться модулем, выполните следующие действия.

  1. Установите модуль. (Обычно это выполняется автоматически.)
  2. Найдите команды, которые добавил модуль.
  3. Теперь вы можете использовать эти команды.

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

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

Если вы получаете модуль в качестве папки с файлами в нем, его необходимо установить на компьютере, прежде чем его можно будет использовать в 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_Command_Precedence

about_DesiredStateConfiguration

about_EventLogs

about_Group_Policy_Settings

about_PSSnapins

Get-Command

Get-Help

Get-Module

Import-Module

Remove-Module