当前位置:网站首页 > 更多 > 玩电脑 > 正文

[玩转系统] PowerShell 模块创作注意事项

作者:精品下载站 日期:2024-12-14 02:57:03 浏览:14 分类:玩电脑

PowerShell 模块创作注意事项


本文档包含一些与如何编写模块以获得最佳性能相关的指南。

模块清单创作

不使用以下准则的模块清单可能会对一般 PowerShell 性能产生显着影响,即使该模块未在会话中使用也是如此。

命令自动发现分析每个模块以确定该模块导出哪些命令,并且这种分析可能会很昂贵。模块分析的结果是按用户缓存的,但缓存在第一次运行时不可用,这是容器的典型场景。在模块分析期间,如果可以从清单中完全确定导出的命令,则可以避免对模块进行更昂贵的分析。

指南

  • 在模块清单中,请勿在 AliasesToExportCmdletsToExportFunctionsToExport 条目中使用通配符。

  • 如果模块不导出特定类型的命令,请通过指定 @() 在清单中显式指定。缺少或 $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(包装 CIM 的 XML 文件)

如果加载模块的速度很重要,那么 CDXML 大约比二进制模块慢一个数量级。

二进制模块加载速度最快,因为它是提前编译的,并且可以使用 NGen 对每台机器进行 JIT 编译一次。

脚本模块的加载速度通常比二进制模块慢一些,因为 PowerShell 必须在编译和执行脚本之前解析脚本。

CDXML 模块通常比脚本模块慢得多,因为它必须首先解析 XML 文件,然后生成大量 PowerShell 脚本,然后对其进行解析和编译。

您需要 登录账户 后才能发表评论

取消回复欢迎 发表评论:

关灯