2

我目前正在学习 PowerShell 模块。如果您使用的是 .psd1 清单文件,则可以选择使用 .ps1 脚本文件以及 .psm1 清单文件。为什么两者都需要?

我创建了一个模块,其中 .psm1 设置为 RootModule 和 .ps1 设置在 ScriptsToProcess 中,我注意到了一些差异,但我不确定它们加起来是什么。

  • 如果我将 Write-Output 语句添加到两者,则在导入时会显示 .ps1 的输出,但会抑制 .psm1 的输出。为 .psm1 显示写警告。
  • 如果我为模块前缀运行 Get-Command前缀,则 .psm1 中的函数会与模块名称一起列出,而 .ps1 文件中的函数会以空白模块名称列出。
4

1 回答 1

1

您放置对 Ps1 文件的引用的清单部分决定了它们的执行方式。

在你的情况下:

  • ScriptsToProcess 将在导入模块之前在调用者的环境中执行列出的 PowerShell 脚本。这让我认为它们是准备脚本。
  • 这是因为此处列出的文件并不包含函数;它应该是一个脚本。如果您希望模块可以访问其他功能,您有几个选择:

    1. 在 NestedModules 中列出它们
    2. 将它们包含在您的模块中
    3. 尝试在清单的导出部分的函数中列出它们。(我没有尝试过这种方法,但我的理解是,无论函数位于何处,它都会按照您想要的方式工作。)
于 2013-09-01T13:52:18.587 回答