PowerShell
Модули Powershell
Поиск…
Вступление
Начиная с версии PowerShell версии 2.0, разработчики могут создавать модули PowerShell. Модули PowerShell инкапсулируют набор общих функций. Например, существуют модули PowerShell, зависящие от поставщика, которые управляют различными облачными службами. Существуют также общие модули PowerShell, которые взаимодействуют со службами социальных сетей и выполняют общие задачи программирования, такие как кодирование Base64, работа с именами каналов и т. Д.
Модули могут выдавать псевдонимы команд, функции, переменные, классы и т. Д.
Создать манифест модуля
@{
RootModule = 'MyCoolModule.psm1'
ModuleVersion = '1.0'
CompatiblePSEditions = @('Core')
GUID = '6b42c995-67da-4139-be79-597a328056cc'
Author = 'Bob Schmob'
CompanyName = 'My Company'
Copyright = '(c) 2017 Administrator. All rights reserved.'
Description = 'It does cool stuff.'
FunctionsToExport = @()
CmdletsToExport = @()
VariablesToExport = @()
AliasesToExport = @()
DscResourcesToExport = @()
}
Каждый хороший модуль PowerShell имеет манифест модуля. Модуль манифеста просто содержит метаданные о модуле PowerShell и не определяет фактическое содержимое модуля.
Файл манифеста - это файл сценария PowerShell с .psd1
файла .psd1
, содержащим HashTable. HashTable в манифесте должен содержать определенные ключи, чтобы PowerShell корректно интерпретировал его как файл модуля PowerShell.
В приведенном выше примере представлен список основных ключей HashTable, которые составляют манифест модуля, но есть много других. Команда New-ModuleManifest
помогает создать новый скелет манифеста модуля.
Пример простого модуля
function Add {
[CmdletBinding()]
param (
[int] $x
, [int] $y
)
return $x + $y
}
Export-ModuleMember -Function Add
Это простой пример того, как может выглядеть файл модуля сценария PowerShell. Этот файл будет называться MyCoolModule.psm1
и ссылается на файл манифеста модуля (.psd1). Вы заметите, что команда Export-ModuleMember
позволяет нам указать, какие функции в модуле мы хотим «экспортировать» или выставить пользователю модуля. Некоторые функции будут доступны только для внутреннего использования и не должны отображаться, поэтому они будут исключены из вызова Export-ModuleMember
.
Экспорт переменной из модуля
$FirstName = 'Bob'
Export-ModuleMember -Variable FirstName
Чтобы экспортировать переменную из модуля, вы используете команду Export-ModuleMember
с параметром -Variable
. Помните, однако, что если переменная также явно не экспортируется в файл манифеста модуля (.psd1), то переменная не будет видна потребителю модуля. Подумайте о манифесте модуля как о «привратнике». Если функция или переменная не разрешена в манифесте модуля, она не будет видна потребителю модуля.
Примечание. Экспорт переменной аналогичен созданию поля в открытом классе. Это нецелесообразно. Было бы лучше разоблачить функцию, чтобы получить поле и функцию для установки поля.
Структурирование модулей PowerShell
Вместо того, чтобы определять все ваши функции в одном .psm1
сценария PowerShell .psm1
PowerShell, вы можете разбить свою функцию на отдельные файлы. Затем вы можете передать эти файлы из вашего файла модуля скрипта, что, по сути, относится к ним так, как если бы они были частью самого файла .psm1
.
Рассмотрим эту структуру каталога модуля:
\MyCoolModule
\Functions
Function1.ps1
Function2.ps1
Function3.ps1
MyCoolModule.psd1
MyCoolModule.psm1
Внутри файла MyCoolModule.psm1
вы можете вставить следующий код:
Get-ChildItem -Path $PSScriptRoot\Functions |
ForEach-Object -Process { . $PSItem.FullName }
Это будет точечный источник отдельных файлов функций в .psm1
модуля .psm1
.
Расположение модулей
PowerShell ищет модули в каталогах, перечисленных в пути $ Env: PSModule.
Модуль, называемый foo , в папке с именем foo будет найден с помощью Import-Module foo
В этой папке PowerShell будет искать манифест модуля (foo.psd1), файл модуля (foo.psm1), DLL (foo.dll).
Видимость члена модуля
По умолчанию только функции, определенные в модуле, видны вне модуля. Другими словами, если вы определяете переменные и псевдонимы в модуле, они не будут доступны, кроме кода модуля.
Чтобы переопределить это поведение, вы можете использовать командлет Export-ModuleMember
. Он имеет параметры, называемые -Function
, -Variable
и -Alias
которые позволяют вам точно указать, какие элементы экспортируются.
Важно отметить, что если вы используете Export-ModuleMember
, будут видны только указанные вами элементы.