你们知道,是否有可能将仅由函数组成的PowerShell项目转换为模块?我想要实现的是创建我所有功能的可分发模块,以便其他人可以使用它。但是没有花时间将所有功能转换为cmdlet。
我的每个功能都在单独的文件中。当我然后创建* .psd1并尝试通过'FunctionsToExport'包含函数时,它不起作用。模块加载后我看不到我的功能。
甚至可以从.psm1文件中的NOT(all all)模块中导出函数?我仍然试图找出真正的差异并使用* psd1和* psm1文件。
答案 0 :(得分:4)
是的,您可以将一堆.ps1
个文件转换为模块。在模块目录$env:USERPROFILE\Documents\WindowsPowerShell\Modules
中创建一个新文件夹,并将所有.ps1
个文件放在该文件夹中。还要在文件夹中创建两个文本文件<foldername>.psm1
和<foldername>.psd1
,这样您就有了这样的结构:
$env:USERPROFILE
`-Documents
`-WindowsPowerShell
`-Modules
`-MyModule
+-MyModule.psd1
+-MyModule.psm1
+-script1.ps1
+-script2.ps1
:
`-scriptN.ps1
将以下行放在.psm1
文件中,以便“导入”所有.ps1
个文件:
Get-ChildItem -Path "$PSScriptRoot\*.ps1" | % { . $_.FullName }
并在module manifest(.psd1
文件)中指定您的元数据,例如:
@{
ModuleToProcess = 'MyModule.psm1'
ModuleVersion = '1.0'
GUID = '6bc2ac1e-2e88-4bc3-ac84-ecd16739b6aa'
Author = 'Matthew Lowe'
CompanyName = '...'
Copyright = '...'
Description = 'Description of your module.'
PowerShellVersion = '2.0'
FunctionsToExport = '*'
CmdletsToExport = ''
VariablesToExport = ''
AliasesToExport = ''
}
例如,可以通过[guid]::NewGuid()
生成GUID。
答案 1 :(得分:1)
这是一个非常简单的方法,没有包括你的功能通过点源模式,就像在另一个答案中所做的那样:
C:\MyModules
。现在,您有一个必须安装在目标计算机中的文件夹(C:\MyModules
)。
要将其安装在目标计算机(每个用户)中,请将文件夹C:\MyModule
复制到用户的默认模块位置(即文件夹):$home\Documents\WindowsPowerShell\Modules
。
现在,此用户可以在任何PowerShell会话中 模块中包含的任何功能的第一个字母,PowerShell的IntelliSense将识别您的功能module(并获取完成子字符串)。
如果您不喜欢名称 MyModule ,只要您更改文件夹名称以及 PSM1 文件名,就可以更改它。
您还可以选择为所有用户安装模块:help about_modules。