Ескертпе
Бұл бетке кіру үшін қатынас шегін айқындау қажет. Жүйеге кіруді немесе каталогтарды өзгертуді байқап көруге болады.
Бұл бетке кіру үшін қатынас шегін айқындау қажет. Каталогтарды өзгертуді байқап көруге болады.
Краткое описание
Описание установки, импорта и использования модулей PowerShell.
Длинное описание
PowerShell — это командная оболочка и язык сценариев. Команды в PowerShell реализуются как скрипты, функции или командлеты. Язык включает ключевые слова, которые предоставляют структуру и логику обработки, а также другие ресурсы, такие как переменные, поставщики, псевдонимы.
Модуль является самостоятельной, многократно используемой единицей, которая может включать командлеты, провайдеры, функции, переменные и другие ресурсы. По умолчанию PowerShell автоматически загружает установленный модуль при первом использовании команды из модуля. Вы можете настроить автоматическое поведение загрузки модуля с помощью переменной $PSModuleAutoLoadingPreference. Дополнительные сведения см. в about_Preference_Variables.
Вы также можете вручную загрузить или выгрузить модули во время сеанса PowerShell. Чтобы загрузить или перезагрузить модуль, используйте Import-Module. Чтобы выгрузить модуль, используйте командлет Remove-Module.
PowerShell включает базовый набор модулей. Любой пользователь может создавать новые модули с помощью C# или самого языка сценариев PowerShell. Модули, написанные на C# как скомпилированные сборки .NET, называются собственными модулями. Модули, написанные в PowerShell, называются модулями скриптов.
В этой статье объясняется, как использовать модули PowerShell. Сведения о создании модулей PowerShell см. в написании модуля PowerShell.
Заметка
До PowerShell 3.0 командлеты и поставщики были упакованы в оснастки PowerShell. Начиная с PowerShell 3.0, оснастка Microsoft.PowerShell.Core по умолчанию добавляется в каждый сеанс. Это единственная оснастка, оставшаяся в PowerShell. Все остальные оснастки были преобразованы в модули. Создание новых оснасток больше не поддерживается.
Расположения модулей по умолчанию
PowerShell хранит модули в следующих расположениях по умолчанию:
- В Windows
- Диапазон всех пользователей —
$Env:ProgramFiles\PowerShell\Modules - Текущая область пользователя —
$HOME\Documents\PowerShell\Modules - Модули, поставляемые с помощью PowerShell—
$PSHOME\Modules
- Диапазон всех пользователей —
- В Linux и macOS
- Диапазон всех пользователей —
/usr/local/share/powershell/Modules - Текущая область пользователя —
$HOME/.local/share/powershell/Modules - Модули, поставляемые с помощью PowerShell—
$PSHOME/Modules
- Диапазон всех пользователей —
По умолчанию папка Modules текущего пользователя не существует. Если вы установили модуль в области CurrentUser с помощью Install-Module или Install-PSResource, эти командлеты создают папку Modules для текущего пользователя. Если папка не существует, ее можно создать вручную.
Используйте следующую команду, чтобы создать папку Modules для текущего пользователя:
$folder = New-Item -Type Directory -Path $HOME\Documents\PowerShell\Modules
Эти расположения автоматически включаются в переменную среды $Env:PSModulePath. Дополнительные сведения о расположениях модулей по умолчанию см. в about_PSModulePath.
Автоматическая загрузка модуля
При первом выполнении команды из установленного модуля PowerShell автоматически импортирует (загружает) этот модуль. Модуль должен храниться в расположениях, указанных в переменной среды $Env:PSModulePath.
Автоматическая загрузка модуля позволяет использовать команды в модуле без настройки или настройки профиля. Каждый из следующих примеров приводит к импорту модуля CimCmdlets, содержащего Get-CimInstance, в ваш сеанс.
Выполнение команды
Get-CimInstance Win32_OperatingSystemПолучите команду
Get-Command Get-CimInstanceПолучить справку по команде
Get-Help Get-CimInstance
При использовании Get-Command с подстановочным символом (*), PowerShell не импортирует модули. Для обнаружения команд можно использовать подстановочные знаки без загрузки модулей, которые могут не потребоваться в сеансе.
Импорт модуля вручную
Импорт модуля вручную требуется, если модуль не установлен в расположениях, указанных переменной среды $Env:PSModulePath, или когда модуль предоставляется как автономный .dll или файл .psm1, а не упакованный модуль.
Кроме того, команды, использующие поставщики PowerShell, не импортируют модуль автоматически. Например, если вы используете команду, требующую WSMan: диска, например командлет Get-PSSessionConfiguration, может потребоваться выполнить командлет Import-Module для импорта модуля Microsoft.WSMan.Management, включающего диск WSMan:.
Кроме того, может потребоваться изменить способ импорта модуля в сеансе. Например, параметр префикса для Import-Module добавляет характерный префикс к существительной части командлетов, импортированных из модуля. Параметр NoClobber запрещает модулю добавлять команды, которые будут скрывать или заменять существующие команды в сеансе. Дополнительные сведения см. в статье Управление конфликтами имен.
В следующем примере модуль BitsTransfer импортируется в текущий сеанс.
Import-Module BitsTransfer
Чтобы импортировать модуль, которого нет в вашем $Env:PSModulePath, используйте полный путь к папке модуля. Например, чтобы добавить модуль testCmdlets
Import-Module C:\ps-test\TestCmdlets
Чтобы импортировать файл модуля, который не содержится в папке модуля, используйте полный путь к файлу модуля в команде. Например, чтобы добавить модуль TestCmdlets.dll в каталог C:\ps-test в сеанс, введите следующее:
Import-Module C:\ps-test\TestCmdlets.dll
Чтобы получить дополнительную информацию о добавлении модулей в сеанс, см. Импорт-модуля.
Импорт модуля в начале каждого сеанса
Команда Import-Module импортирует модули в текущий сеанс PowerShell. Чтобы импортировать модуль в каждый начальный сеанс PowerShell, добавьте команду Import-Module в профиль PowerShell.
Дополнительные сведения о профилях см. в about_Profiles.
Установка опубликованного модуля
Опубликованный модуль — это модуль, доступный из зарегистрированного репозитория, например из коллекции PowerShell. Модули PowerShellGet и Microsoft.PowerShell.PSResourceGet предоставляют командлеты для поиска, установки и публикации модулей PowerShell в зарегистрированном репозитории.
Модуль PowerShellGet входит в состав PowerShell 5.0 и более поздних выпусков. Модуль Microsoft.PowerShell.PSResourceGet входит в состав PowerShell 7.4 и более поздних выпусков и является предпочтительным диспетчером пакетов для PowerShell.
Microsoft.PowerShell.PSResourceGet можно установить параллельно с PowerShellGetна более ранних версиях 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.
Установка модуля вручную
Вы можете вручную установить модуль, скопировав содержимое модуля из другой папки. Эта папка может располагаться в другой директории на локальном компьютере или быть установлена на другом компьютере. Чтобы установить модуль вручную, скопируйте всю папку модуля в новое расположение, включенное в $Env:PSModulePath.
В PowerShell используйте командлет Copy-Item. Например, выполните следующую команду, чтобы скопировать папку MyModule из C:\PSTest:
$modulePath = $HOME\Documents\PowerShell\Modules\MyModule
Copy-Item -Path C:\PSTest\MyModule\* -Destination $modulePath -Recurse
Модуль можно установить в любом расположении, но установка модулей в расположении модуля по умолчанию упрощает управление.
Поиск установленных модулей
Командлет Get-Module получает модули PowerShell, загруженные в текущий сеанс 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 или Prefix командлета Import-Module. Параметр префикса добавляет префикс в имена импортированных команд, чтобы они были уникальными в сеансе. Параметр NoClobber не импортирует команды, которые будут скрывать или заменять существующие команды в сеансе.
Кроме того, можно использовать параметры псевдонимов, командлетов, функцийи переменных в Import-Module, чтобы выбрать только те команды, которые необходимо импортировать, и вы можете исключить команды, вызывающие конфликты имен в вашем сеансе.
Авторы модулей могут предотвратить конфликты имен с помощью свойства defaultCommandPrefix манифеста модуля, чтобы добавить префикс по умолчанию ко всем именам команд. Значение параметра префикс имеет приоритет над значением DefaultCommandPrefix.
См. также
PowerShell