如何将脚本文件中的函数包含到 PowerShell 模块中
How to include functions in script files into PowerShell module
我正在使用 PowerShell 5.0 并尝试编写一个多文件模块。
该模块的文件夹结构如下所示:
/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!"
被调用了。
完成这项工作的正确方法是什么?
您可以在模块清单中的 ScriptsToProcess
数组中添加脚本:
# Script files (.ps1) that are run in the caller's environment prior to importing this module.
ScriptsToProcess = @('.\AnotherScriptFile.ps1')
我正在使用 PowerShell 5.0 并尝试编写一个多文件模块。
该模块的文件夹结构如下所示:
/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!"
被调用了。
完成这项工作的正确方法是什么?
您可以在模块清单中的 ScriptsToProcess
数组中添加脚本:
# Script files (.ps1) that are run in the caller's environment prior to importing this module.
ScriptsToProcess = @('.\AnotherScriptFile.ps1')