我可以将CSV文件打包为模块资源吗?

时间:2016-03-15 19:11:07

标签: powershell powershell-module

我有一个带有相应模块清单的自定义PowerShell模块。在我的模块中的一个命令中,我有一个硬编码的哈希表数组。起初这很好,但偶尔我必须返回并为这个硬编码数组添加新的哈希表,并且数组变得非常长。以这种方式管理这些数据变得越来越困难。我真正想要做的是将此集合移到外部资源(例如CSV文件)中,并让命令从CSV文件中读取数据。实际上,这是我从一开始就喜欢的,但它刚刚变得痛苦,我觉得有必要弄清楚如何做到这一点。

我的问题是我该怎么做呢?或者甚至可以完成?我已经阅读了很多关于模块清单的内容,但我不记得读过任何描述在清单文件中指定其他资源的方法,或者如何加载这些资源以便私有'私有'到一个模块。我想我可以将CSV文件放在模块的文件夹中,包含所有其他PowerShell文件,然后也许我可以使用$PSScriptRoot找到它,但这看起来不是很好#39;官方' (而且我不是100%肯定它会起作用)。另外,通过这样做,清单中没有任何内容可以向其他人建议模块正常运行所需的其他资源。

对于类似这样的事情是否有最好的做法,或者我是否会出现这种错误?

1 个答案:

答案 0 :(得分:4)

清单定义确实有一个关键;它被称为 FileList ,本质上是一个文件数组。由于New-ModuleManifest cmdlet生成的描述说明了"此模块打包的所有文件的列表,"这就是我使用它时指定的内容。 (我没有列出.psm1文件,因为它列在清单的其他地方。)

# List of all files packaged with this module
FileList = @(
   'script1.ps1',
   'script2.ps1',
   'Microsoft.Web.Publishing.Tasks.Dll',
   'transform.proj',
   'some_file.xml'
)

至于定位文件,我只需使用$PSScriptRoot,就像你建议的那样。

据我所知,没有任何东西可以自动处理模块的安装。您仍然可以将其放入PSModulePath环境变量中的文件夹中。