如何将脚本文件的集合转换为模块?

Mat*_*owe 4 powershell powershell-module

你们知道是否可以将仅由函数组成的PowerShell项目转换为模块?我想要实现的是创建我所有功能的可分发模块,以便其他人可以使用它。但无需花费时间将所有函数转换为 cmdlet。

我的每个函数都在单独的文件中。当我创建 *.psd1 并尝试通过“FunctionsToExport”包含函数时,它不起作用。加载模块后我看不到我的功能。

当模块(全部)不在 .psm1 文件内时,是否可以从模块导出函数?我仍在尝试找出 *psd1 和 *psm1 文件的真正区别和用途。

Ans*_*ers 6

是的,您可以将一堆.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
Run Code Online (Sandbox Code Playgroud)

将以下行放入文件中.psm1,以便它“导入”所有.ps1文件:

Get-ChildItem -Path "$PSScriptRoot\*.ps1" | % { . $_.FullName }
Run Code Online (Sandbox Code Playgroud)

并在模块清单(文件)中指定您的元数据.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   = ''
}
Run Code Online (Sandbox Code Playgroud)

例如可以通过 生成 GUID [guid]::NewGuid()