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

时间:2015-05-25 20:38:34

标签: powershell powershell-module

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

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

甚至可以从.psm1文件中的NOT(all all)模块中导出函数?我仍然试图找出真正的差异并使用* psd1和* psm1文件。

2 个答案:

答案 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)

这是一个非常简单的方法,没有包括你的功能通过点源模式,就像在另一个答案中所做的那样:

  1. 创建文件夹C:\MyModules
  2. 在此文件夹中,创建名为 MyModules.PSM1 文件。
  3. 附加到 MyModules.PSM1 文件,模块中所需的所有功能(它们不需要高级)。
  4. 您已完成
  5. 现在,您有一个必须安装在目标计算机中的文件夹(C:\MyModules)。

    要将其安装在目标计算机(每个用户)中,请将文件夹C:\MyModule复制到用户的默认模块位置(即文件夹):$home\Documents\WindowsPowerShell\Modules

    现在,此用户可以在任何PowerShell会话中 模块中包含的任何功能的第一个字母,PowerShell的IntelliSense将识别您的功能module(并获取完成子字符串)。

    如果您不喜欢名称 MyModule ,只要您更改文件夹名称以及 PSM1 文件名,就可以更改它。

    您还可以选择为所有用户安装模块:help about_modules。