2016-07-05 51 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

相關問題