你们知道,是否可以将仅由函数组成的 PowerShell 项目转换为模块?我想要实现的是创建我所有功能的可分发模块,以便其他人可以使用它。但无需花费时间将所有功能转换为 cmdlet。
我的每个函数都在单独的文件中。然后,当我创建 *.psd1 并尝试通过“FunctionsToExport”包含函数时,它不起作用。加载模块后我看不到我的功能。
当它们不是(全部)在 .psm1 文件中时,甚至可以从模块中导出函数吗?我仍在尝试找出 *psd1 和 *psm1 文件的真正区别和使用。
你们知道,是否可以将仅由函数组成的 PowerShell 项目转换为模块?我想要实现的是创建我所有功能的可分发模块,以便其他人可以使用它。但无需花费时间将所有功能转换为 cmdlet。
我的每个函数都在单独的文件中。然后,当我创建 *.psd1 并尝试通过“FunctionsToExport”包含函数时,它不起作用。加载模块后我看不到我的功能。
当它们不是(全部)在 .psm1 文件中时,甚至可以从模块中导出函数吗?我仍在尝试找出 *psd1 和 *psm1 文件的真正区别和使用。
是的,你可以把一堆.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 }
并在模块清单(文件)中指定您的元数据.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 [guid]::NewGuid()
。
这是一种非常简单的方法,无需通过点源模式包含您的功能,就像在另一个答案中所做的那样:
C:\MyModules
。现在,您有一个必须安装在目标机器上的文件夹 ( C:\MyModules
) 。
要将其安装在目标机器(每个用户),请将文件夹复制C:\MyModule
到用户的默认模块位置(即文件夹)$home\Documents\WindowsPowerShell\Modules
:.
现在,该用户可以在任何 PowerShell 会话中键入包含在模块中的任何函数的首字母,PowerShell 的智能感知将识别模块中的函数(并提示完成子字符串)。
如果您不喜欢MyModule这个名称,您可以更改它,只要更改文件夹名称以及PSM1文件名即可。
您还可以选择为所有用户安装您的模块:help about_modules。