【问题标题】:How to manage dependencies between scripts in multi-file Powershell Module?如何管理多文件 Powershell 模块中脚本之间的依赖关系?
【发布时间】:2011-09-07 11:02:09
【问题描述】:

我在一个长期项目的过程中编写了大量的 powershell 代码;这些脚本执行各种各样的功能,其中大多数以某种方式依赖于项目范围内的其他脚本。现在,这项工作由几个文件组成,每个文件都包含许多功能。最初,为了使用这些脚本,所有脚本文件都被随意地点源到环境中。

但是,我最近了解到 Powershell 2.0 引入了模块,我想以这种方式将这些脚本一起部署。由于一个模块的内容都是一起加载的,我想拆分我的文件,以便每个脚本都有自己的文件,以帮助源代码控制。但是,我现在对脚本之间的联系有点不清楚。

我已经做了一些测试,似乎可以将每个函数的 Export-ModuleMember 命令移动到单独的 .ps1 文件中;这似乎更像是声明自己的范围的函数,例如 C# 中的公共和私有范围。但是,在这样做之后,我的 .psm1 文件只包含以下内容:

Get-ChildItem -recurse $psScriptRoot | where { $_.Extension -eq ".ps1" } | foreach { . $_.FullName }

这看起来对吗?所有的脚本都是点源的,所有的脚本都是在这种假设下相互引用的。他们是否应该使用相对于 $psScriptRoot 的位置来相互引用?

有没有与这两种方式不同的方式?任何人都可以提供建议吗?我对这些还不是很了解。

【问题讨论】:

    标签: powershell module dependencies powershell-module


    【解决方案1】:

    我见过一种类似的技术,其中每个 .ps1 文件都包含一个函数,这些函数来源于 WPK 模块和 PSRemoteRegistry 模块中使用的 PSM1 文件。

    这一行是 PSRemoteRegistry 模块:

    Get-ChildItem -Path $PSScriptRoot\*.ps1 | Foreach-Object{ . $_.FullName }
    

    我会说我喜欢这种技术,而不是拥有一个巨大的函数脚本文件。

    【讨论】:

    • 我是这样做的,但我将几个类似的函数组合到一个脚本中,而不是每个都放在自己的文件中。
    【解决方案2】:

    您还可以查看创建清单(我实际上不知道您是否需要带有 psd1 的 psm1)。

    这是我对清单的使用:

    New-ModuleManifest `
        -Path Fiddler.psd1 `
        -Author "Niklas Goude" `
        -CompanyName "http://www.powershell.nu/" `
        -ModuleVersion 1.0 `
        -Description "Module from http://www.powershell.nu/2011/03/14/fiddler/</a> - psd1 created by Matt @ amonskeysden.tumblr.com" `
        -FormatsToProcess @() `
        -RequiredAssemblies @("Fiddler.dll") `
        -NestedModules @() `
        -Copyright "" `
        -ModuleToProcess "Fiddler.psm1" `
        -TypesToProcess @() `
        -FileList @("Fiddler.psm1","Fiddler.dll")
    

    我认为您的问题的答案是将您的文件列表包含在 FileList 参数中。

    我在这里写了一些我的发现(包括 MS 资源的链接):

    http://amonkeysden.tumblr.com/post/5127684898/powershell-and-fiddler

    【讨论】:

    • 问题是这仍然没有导出命令,因此 get-command -module Fiddler 将显示该模块提供的命令。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2010-11-12
    • 1970-01-01
    • 2013-01-19
    • 1970-01-01
    • 2012-12-22
    • 2017-01-15
    • 2015-12-28
    相关资源
    最近更新 更多