繁体   English   中英

PowerShell:如何从模块文件psm1和作为外部ps1文件导出功能

[英]PowerShell: How to export a function from the module file psm1 and as external ps1 file

我试图找出如何既可以导出在psm1文件中编写的模块成员(函数)又可以导出在其自己的ps1文件中编写的成员函数。 但是两者都需要导出为同一模块/项目的成员...

例如,第一个函数太小或太简单以至于没有自己的文件,第二个函数是高级函数,它需要自己的文件来保持整个shabang的概览...

现在我将如何导出这两种情况,甚至为这两种情况分配别名...

谁能解释我将如何实现这一目标,到目前为止,我的尝试导致了错误,尽管我分别实现了这两项目标。

提前Tnx。

您是否尝试过网点采购?

它不会将ps1作为模块的一部分加载(为此,该功能必须位于模块中,而不是在单独的ps1文件中),但仍会从中加载功能。

# Load the module
Import-Module ".\MyPowershellModule.psm1"

# Load the ps1
. ".\MyPowershellScript.ps1"

# Use a function from ps1
FunctionFromPs1 -ThisParam -ThatParam

# Use a function from module
FunctionFromModule -ThisParam -ThatParam

我能想到的唯一其他方法( 强烈建议您这样做)是将ps1点源化到模块中并加载模块

您是否有不能将功能添加到模块的原因? 模块应该是功能的大型存储库(我个人认为是3k +行)。 我确实同意,将所有功能都放在一个文件中会让人不知所措,但是将它们放在一个位置会比拥有30 ps1文件要好。

这些是我采取的步骤。

步骤1:使用2个简单函数创建一个psm1文件,然后将它们都导出。 这工作正常,并且符合预期

第2步:使用第3个函数的名称创建一个外部文件。 PowerShell将看不到第三功能

步骤3:在模块psm1文件的顶部添加一个点采购行。

PowerShell将看不到第三功能

步骤4:创建一个psd1文件,并将第三个函数添加到“ FunctionsToExport”。 Powershell不会看到前两个功能

步骤5:将这两个函数添加到psd1文件中的“ FunctionsToExport”中,PowerShell可以看到所有函数,并且一切正常且符合预期

步骤6:注释掉psm1文件顶部的dotsourcing代码行。功能单击psm1文件中的功能1和2可以正常工作时,三个消失的地方(这是外部功能)。

步骤7:将所有文件添加到psd1文件的FileList属性中与步骤6相同的情况

步骤8:将psm1文件添加到psd1文件的ModuleList属性。 与步骤6相同

步骤9:将(外部)函数3添加到psd1文件的ScriptsToProcess属性中与步骤6相同的情况

在执行了这些步骤之后,我看不到任何其他方法,然后从psm1文件中对外部ps1文件进行点外包,同时讲述psd1文件中的所有功能...这样,powershell将看到所有功能

替代点外包的方法是使用清单的嵌套模块属性

根据https://docs.microsoft.com/zh-CN/powershell/developer/module/how-to-write-a-powershell-module-manifest

您可以在psd1清单的nested modules属性中列出ps1和psm1文件的相对路径。

您还需要列出清单中要导出的所有功能。 另请参阅从脚本获取功能列表

function Get-RunningServices {get-service | where-object {$_.Status -eq "running"}|Select-Object -Property DisplayName, Name| Sort-Object -property DisplayName}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM