我需要创建一个可以在Powershell 7中运行并使用Powershell 5中的Commandlet的模块。
我想将此模块另存为工件,然后在AzureDevOps Artifacts中发布。
该模块用于审核跨平台系统信息。问题是某些cmdlet是Windows平台特定的,例如Get-WindowsFeature
。我还想使用PowerShell Core功能,例如Azure Cosmos通信cmdlet。
如何仅在某些平台上加载功能?
您是否需要用C#编写一些东西来实现此目的,或在我的主模块中嵌套用于特定平台的模块?
答案 0 :(得分:0)
注释正确提及,您可以使用版本检查来包装命令。 对于一个小命令来说,这是一个不错的选择。 作为更好的模块设计,我建议只包含两个模块,每个平台一个。 这将使您更好地分离您的工作,而不依赖于有条件地在不同平台上运行操作的许多嵌入式逻辑步骤。对我来说,这更干净。
当您开始使用模块时,强烈建议您使用模板来引导项目。我发现它可以节省很多时间,并为我提供了最佳实践。
我个人最喜欢的是PSModuleDevelopment,您可以这样使用:
Install-Module PSModuleDevelopment -Scope CurrentUser
Get-Help 'Invoke-PSMDTemplate'
这与某些非常成熟的项目(例如dbatools和PSFramework使用)的加载结构非常相似。如果使用此功能,则主要受益于:
我不再尝试编写自己的模块结构,而是利用了这样的开发模块,这对我非常有帮助。
祝你好运!