Рекомендации по разработке модуля PowerShell
В этом документе содержатся некоторые рекомендации, связанные с тем, как модуль создается для оптимальной производительности.
Разработка манифеста модуля
Манифест модуля, который не использует следующие рекомендации, может заметно повлиять на общую производительность PowerShell, даже если модуль не используется в сеансе.
Команда автоматического обнаружения анализирует каждый модуль, чтобы определить, какие команды экспортирует модуль, и этот анализ может быть дорогостоящим. Результаты анализа модулей кэшируются на пользователя, но кэш недоступен при первом запуске, что является типичным сценарием с контейнерами. При анализе модуля, если экспортированные команды можно полностью определить из манифеста, можно избежать более дорогого анализа модуля.
Руководящие принципы
В манифесте модуля не используйте подстановочные знаки в записях
AliasesToExport
,CmdletsToExport
иFunctionsToExport
.Если модуль не экспортирует команды определенного типа, укажите это явно в манифесте, указав
@()
. Запись$null
или её отсутствие эквивалентна указанию подстановочного знака*
.
Если это возможно, следует избежать следующих действий.
@{
FunctionsToExport = '*'
# Also avoid omitting an entry, it's equivalent to using a wildcard
# CmdletsToExport = '*'
# AliasesToExport = '*'
}
Вместо этого используйте:
@{
FunctionsToExport = 'Format-Hex', 'Format-Octal'
CmdletsToExport = @() # Specify an empty array, not $null
AliasesToExport = @() # Also ensure all three entries are present
}
Избегайте CDXML
При выборе способа реализации модуля существует три основных варианта:
- Двоичный (обычно C#)
- Скрипт (PowerShell)
- CDXML (XML-файл с оболочкой CIM)
Если важна скорость загрузки вашего модуля, CDXML примерно на порядок медленнее, чем двоичный модуль.
Двоичный модуль загружается быстрее всего, так как он компилируется заранее и с применением NGen может выполнять JIT-компиляцию по одному разу на каждом компьютере.
Модуль скрипта обычно загружает немного медленнее, чем двоичный модуль, так как PowerShell должен проанализировать скрипт перед компиляцией и выполнением этого модуля.
Модуль CDXML обычно гораздо медленнее скриптового модуля, так как он должен сначала проанализировать XML-файл, который генерирует значительное количество скрипта PowerShell, после чего оно анализируется и компилируется.
PowerShell