【问题标题】:Can I package a CSV file as a module resource我可以将 CSV 文件打包为模块资源吗
【发布时间】:2016-03-15 19:11:06
【问题描述】:

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

我的问题是我该怎么做?或者甚至可以做到吗?我已经阅读了很多关于模块清单的内容,但我不记得阅读过任何描述在清单文件中指定附加资源的方法或如何以“私有”到模块的方式加载这些资源的内容。我想我可以将 CSV 文件与所有其他 PowerShell 文件一起放入模块的文件夹中,然后 也许 我可以使用 $PSScriptRoot 找到它,但这似乎不是很“官方”(我是不是 100% 确定它会起作用)。另外,通过这样做,清单中的任何内容都不会向其他人暗示模块正常运行所需的其他资源。

这样的事情是否有最佳实践,还是我完全错了?

【问题讨论】:

    标签: powershell powershell-module


    【解决方案1】:

    清单定义确实为此提供了一个键;它被称为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 环境变量中的文件夹中。

    【讨论】:

    • 好吧,我会的……就是这么简单。谢谢。
    • 编写自己的模块的文档确实有点稀疏...计划进行实验。祝你好运!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-11-11
    • 2011-06-04
    • 1970-01-01
    相关资源
    最近更新 更多