gpt4 book ai didi

PowerShell 模块 list - 自动加载所需模块

转载 作者:行者123 更新时间:2023-12-02 23:24:46 29 4
gpt4 key购买 nike

我正在创建一个模块,该模块依赖于我需要加载到全局环境中的其他几个模块。我尝试创建一个脚本并使用 ScriptsToProcess 导入模块,但看起来对RequiredModules 的检查发生在 ScriptstoProcess 运行之前。

模块 list 中是否有一种漂亮、干净的方法来要求模块并在尚未加载时自动加载它?如果无法加载模块,则RequiredModule将抛出错误。

最佳答案

在 PowerShell 3 及更高版本中,RequiredModules 自动加载

如果您要分发该模块,这也是确保使用 PowerShellGet(即 PowerShell Gallery )的人安装您的依赖项的唯一方法。

如果缺少所需的模块,它仍然会失败,但否则会完全按照您希望的方式工作。

在PowerShell 2中,无法自动加载RequiredModules

无论哪种情况,用户都可以通过键入 Import-Module requiredModule, YourModule 来手动加载需求 - 如果已经导入,他们将不会获得第二个实例...

您还可以在 NestedModules 中指定模块。即使在 PowerShell 2 中,这些也会在模块“内部”加载,但在加载资源后似乎不会对资源产生负面影响。然而,正如@JasonMArcher提醒我的那样,在PowerShell 2中,如果您的模块被卸载(通过Remove-Module),NestedModules也会与您的模块一起被卸载,并且这种情况即使它们是单独预加载的也会发生用户,这最终可能会产生非常奇怪的错误报告,因为您的用户不会预料到这一点。

另一个选项适用于所有版本的 PowerShell,是在模块顶部调用 Import-Module(在 psm1 脚本中,在检查确保模块尚未加载)并设置了 -ErrorAction Stop ,这样,如果依赖模块的导入失败,模块的导入也会失败。

if (!(Get-Module Dependency)) { ## Or check for the cmdlets you need
## Load it nested, and we'll automatically remove it during clean up
Import-Module Dependency -ErrorAction Stop
}

实际上,如果您想检查版本...

if (!(Get-Module Dependency | Where { $_.Version -ge "2.5" )) { 
## Load version 2.5 (or newer), or die
Import-Module Dependency -Version 2.5 -ErrorAction Stop
}

请记住,这不作为文档,因此,如果您分发该模块,您的用户将不知道依赖项。

关于PowerShell 模块 list - 自动加载所需模块,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5489494/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com