Powershell核心和Powershell模块

时间:2020-03-24 17:53:10

标签: powershell .net-core powershell-5.0 powershell-core powershell-module

我需要创建一个可以在Powershell 7中运行并使用Powershell 5中的Commandlet的模块。

我想将此模块另存为工件,然后在AzureDevOps Artifacts中发布。

该模块用于审核跨平台系统信息。问题是某些cmdlet是Windows平台特定的,例如Get-WindowsFeature。我还想使用PowerShell Core功能,例如Azure Cosmos通信cmdlet。

如何仅在某些平台上加载功能?

您是否需要用C#编写一些东西来实现此目的,或在我的主模块中嵌套用于特定平台的模块?

1 个答案:

答案 0 :(得分:0)

注释正确提及,您可以使用版本检查来包装命令。 对于一个小命令来说,这是一个不错的选择。 作为更好的模块设计,我建议只包含两个模块,每个平台一个。 这将使您更好地分离您的工作,而不依赖于有条件地在不同平台上运行操作的许多嵌入式逻辑步骤。对我来说,这更干净。

当您开始使用模块时,强烈建议您使用模板来引导项目。我发现它可以节省很多时间,并为我提供了最佳实践。

我个人最喜欢的是PSModuleDevelopment,您可以这样使用:

Install-Module PSModuleDevelopment -Scope CurrentUser
Get-Help 'Invoke-PSMDTemplate'

这与某些非常成熟的项目(例如dbatools和PSFramework使用)的加载结构非常相似。如果使用此功能,则主要受益于:

  • 能够将所有功能分离到各自的文件中并轻松加载
  • 对模块中的预加载配置进行了一些不错的增强
  • 包括Pester测试模板

我不再尝试编写自己的模块结构,而是利用了这样的开发模块,这对我非常有帮助。

祝你好运!