繁体   English   中英

PowerShell模块 - 每个cmdlet的单独文件

[英]PowerShell module - separate file for each cmdlet

我已经有一段时间了。 我打算为我的项目创建新的PowerShell模块。 目标是将多个自定义cmdlet打包到独立单元中,我可以通过我们的Nexus存储库(或通过其他任何方式)将其部署到其他计算机。

问题:我看到的每个地方,都看到教程将所有PowerShell函数/ cmdlet打包成单个* .psm1文件。 文件存储在同名目录中,实际上代表模块本身。

问题:有没有办法,如何将每个cmdlet /函数分成独立文件? 如果我有一个由几个cmdlet组成的模块,将它们全部放在单个* .psm1文件中并不是很方便。

谢谢马修

您还可以使用清单文件。 “模块清单是包含哈希表的.psd1文件。哈希表中的键和值执行以下操作:

  • 描述模块的内容和属性。
  • 定义先决条件
  • 确定如何处理组件。

模块不需要清单。 模块可以引用脚本文件(.ps1),脚本模块文件(.psm1),清单文件(.psd1),格式和类型文件(.ps1xml),cmdlet和提供程序集(.dll),资源文件,帮助文件,本地化文件,或作为模块一部分捆绑的任何其他类型的文件或资源。 对于国际化脚本,模块文件夹还包含一组消息目录文件。 如果将清单文件添加到模块文件夹,则可以通过引用清单将多个文件作为单个单元引用。“( 来源

因此,您可以直接从psd1文件使用ps1文件而不是psm1文件:

# Modules to import as nested modules of the module specified in RootModule/ModuleToProcess 
NestedModules = 'Get-WUList.ps1','Add-WUOfflineSync.ps1'

# Functions to export from this module 
FunctionsToExport = 'Get-WUList','Add-WUOfflineSync'

跟进@MatthewLowe - 我已经将我的.psm1变成了“一个班轮”,如下所示; 这似乎有效, 前提是没有一个scriptlet依赖于其名称按字母顺序排列的脚本

Get-ChildItem -Path $psScriptRoot\\*.ps1 | ForEach-Object { . $_.fullname; Export-ModuleMember -Function ([IO.PATH]::GetFileNameWithoutExtension($_.fullname)) }

刚发布这个我发现的答案,因为我实际上是在问自己:-)。 我从互联网上下载了一些PowerShell模块并向内看,我在那里找到了答案。 但是因为我被困在这几个小时(对于PowerShell来说是新的;-)),所以我决定发布这个,为后代:-P。

您可以将cmdlet(* .ps1文件)EACH放入单独的文件中。 将它们存储在模块目录中并创建* .psm1文件。 然后,将* .ps1 cmdlet / functions点源到此* .psm1。

但是,必须像这样提供对存储* .ps1文件的当前模块目录的引用
“。$ psScriptRoot / moduleFunc1.ps1” 并且不喜欢./moduleFunc1.ps1

享受马修

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM