2012-07-19 61 views
4

我最近在使用PowerShell脚本部署的项目上工作过。我们在不同的文件中或多或少地编码了2000行。其中一些专用于常用方法,但是在为每一种方法编码500行之后,很难找到使用什么方法或是否需要实施新方法。如何实现PowerShell功能库?

所以,我的问题关于什么是实现一个PowerShell函数库的最佳方式:

较好具有大量代码的某些文件比有很多的文件用几行代码?

回答

3

你可以创建一个Module你可以在那里你存储所有你的脚本致力于共同的工作。

+0

我知道模块的基础,但我仍然遇到同样的问题:一个文件加载脚本方法或每个文件加载一个方法? – jaloplo 2012-07-19 11:00:29

+0

@jaloplo国际海事组织只是一个.psm1文件与所有脚本,或更多的模块与脚本根据您的偏好使用分组。 – 2012-07-19 11:47:38

+0

你是对的,直到我阅读这些文章时,我才知道模块的潜力http://dotnetslackers.com/articles/net/Converting-a-PowerShell-Script-into-a-Module.aspx – jaloplo 2012-07-19 12:52:22

0

我同意@ Christian的建议并使用一个模块。

您可能会使用的一种方法是将模块分解为多个脚本并将它们全部包含在最终模块中。你可以用.PSM1文件将它们点出来,或者在清单中指定文件(.PSD1文件)。

0

我倾向于有多个基于主题(松散,名词)的模块。例如,如果我有一堆处理MongoDB的函数,我会有一个MongoDB模块。如果我需要它们,可以很容易地将它们拉入会话中,但不会在每次会话中混淆我很少使用的一堆函数。一致的命名约定将使得知道要导入的内容变得容易。例如,modMongoDB.psm1是一个很容易记住的名字。

作为一个方面说明,在3.0模块加载可以配置为自动,所以不需要在配置文件中预加载一堆模块。

5

@MikeShepard的答案在概念上是最好的选择。这里有几个实现的想法可以配合它:

  • 我有许多语言的开源库。正如Mike Shepard所建议的,我的PowerShell API首先将顶层组织成不同的主题。

  • 对于主题(模块)与一个以上的功能(例如SvnSupport),每个公开函数是在使用其私有支持的函数和变量单独的文件中,从而提高凝聚力和减小耦合。

  • 要将一个主题(模块)中的函数集合在一起,您可以单独列举它们(通过点源或包含在清单中,如@Thomas Lee建议的那样)。但我的选择是从Scott Muc那里找到的技术。使用以下代码作为.psm1文件的整个内容,并将每个其他函数放在单独的.ps1文件中的相同目录中。


Resolve-Path $PSScriptRoot\*.ps1 | 
? { -not ($_.ProviderPath.Contains(".Tests.")) } | 
% { . $_.ProviderPath } 

实际上有相当多的更要说功能和模块;感兴趣的读者可能会发现我在Simple-Talk.com上发布的文章Further Down the Rabbit Hole: PowerShell Modules and Encapsulation是一个有用的起点。