加速 PowerShell 模块导入的最佳实践是什么?

问题描述 投票:0回答:1

最近我将超过 2K 行的 ps1 主脚本(包含许多函数和变量)移至 PowerShell 模块。 一切似乎都很好 - 导入模块后我可以调用我的函数并且它运行良好。 我注意到模块在完全准备好之前加载速度很慢。我用这个简单的命令:

Import-Module -Name .\TestModule -Verbose -Force

然后整个模块正在加载,但对我来说,它比我之前(在一个 ps1 脚本中)慢得多。

我的模块的结构就像这个简单的屏幕上一样:

Structure of my module

在主目录中,我有 2 个文件:PSD1 和 PSM1,以及 1 个目录(公共),里面有许多目录,其中我的所有函数都按主题编目在子目录中。

在 PSD1 文件中,我使用简单的代码来添加我的功能:

> FunctionsToExport = '*'

在 PSM1 文件中,我使用此查询来查找所有 PS1 文件:

> ForEach ($Script in
  (Get-ChildItem -File -Recurse -LiteralPath $PSScriptRoot -Filter *.ps1)
) { 
  . $Script.FullName 
}

就像我用我的函数编写了导入模块一样,但在我下一步做任何事情之前,我认为我必须等待相当长的时间。 那么这个方法是否可以改进来紧固呢?

2. 我的第二个问题是关于变量的。 现在我在 ps1 中有它,也从目录加载: 公共\变量\MainVariables.ps1。 这是存储我所有变量的好方法吗?

powershell module
1个回答
0
投票

我测试了一些解决方案,并通过将模块放在命令之间来测量它:

$ExecutionTime = [System.Diagnostics.Stopwatch]::StartNew() 

Import-Module -Name .\TestModule -Verbose -Force

$ExecutionTime.Stop(); $ExecutionTime.Elapsed

最适合我的场景是所有函数的列表并将该列表添加到 psd1 文件中:

FunctionsToExport = @(
        'Function1'
        'Function2'
        'Function3'
)

在我简单地将它们全部添加后,我的模块的负载增加了。当我特别知道这个模块之前已经加载时,我还会按照建议删除某些情况下的“-Force”开关。这可能会处理另一个命令来检查我的模块是否已经加载,就像本主题的答案之一一样: 如何检查是否安装了 PowerShell 模块?

最新问题
© www.soinside.com 2019 - 2025. All rights reserved.