2016-07-05 82 views
1

我正在使用PowerShell 5.0并尝试编写多文件模块。
该模块的文件夹结构是这样的:如何将脚本文件中的函数包含到PowerShell模块中

/FooModule 
--- FooModule.psd1 
--- FooModule.psm1 
--- AnotherScriptFile.ps1 

清单文件FooModule.psd1定制类似如下:

@{ 
    ModuleVersion = '0.0.1' 
    GUID = ... 
    Author = ... 
    CompanyName = .. 
    Copyright = ... 
    Description = ... 
    PowerShellVersion = '5.0' 
    ClrVersion = '4.0' 
    RootModule = "FooModule.psm1" 
    FunctionsToExport = '*' 
    CmdletsToExport = '*' 
    VariablesToExport = '*' 
    AliasesToExport = '*' 
    # HelpInfoURI = '' 
    # DefaultCommandPrefix = '' 
} 

我把这些在FooModule.psm1的开头:

Push-Location $PSScriptRoot 
.\AnotherScriptFile.ps1 
Pop-Location 

AnotherScriptFile.ps1看起来像这样:

Write-Host "Imported!" 
function Get-FooFunction($val) 
{ 
    return "Foo Bar"; 
} 

我想,当我导入模块时,它会将AnotherScriptFile.ps1的函数和变量读入模块的作用域,并导出。 不幸的是,我在模块的文件夹中导入了Import-Module .\FooModule.psm1模块后,调用Get-FooFunction给了我一个错误,说Get-FooFunction不存在,'Write-Host "Imported!"被调用。

什么是正确的方法来完成这项工作?

回答

2

您可以将您的模块清单内的ScriptsToProcess阵列中添加脚本:

# Script files (.ps1) that are run in the caller's environment prior to importing this module. 
ScriptsToProcess = @('.\AnotherScriptFile.ps1') 
+0

感谢您的快速回复。我尝试过,但它没有工作:( – WonTasia

+1

另一种方法是点击您的FooModule.psm1中的文件(用另一个点)。试试这个: '。\。\ AnotherScriptFile.ps1' –

+0

我试过了,但是这一次发生了错误,说'.. \ AnotherScriptFile.ps1不被识别为cmdlet,函数,脚本文件或可操作程序的名称。“。工作目录被设置为模块的根目录。 – WonTasia

相关问题