我正在尝试在 Azure 自动化帐户中使用自定义 PowerShell 模块。
我已经准备好了模块并在本地进行了测试。它已加载并且可以使用命令。
但是,当我将模块打包并上传到 Azure 自动化时,它总是导入模块而不导出命令,尽管路径已存在并且功能应该可用。
我的模块由位于模块“functions”文件夹中每个函数的专用文件组成。我使用以下方法通过 .psm1 文件加载函数:
$functions = @(Get-ChildItem -Path $PSScriptRoot\functions\*.ps1 -ErrorAction SilentlyContinue)
foreach ($import in @($functions)) {
try {
. $import.Fullname -ErrorAction Stop
}
catch {
Write-Error -Message "Failed to import function $($import.Fullname): $_" -ErrorAction Continue
}
}
Export-ModuleMember -Function $functions.Basename
我的 .psd1 是从模板创建的:
#...
RootModule = 'MHZ.Developer.psm1
#...
FunctionsToExport = '*'
CmdletsToExport = '*'
VariablesToExport = '*'
AliasesToExport = @()
#...
我尝试注释掉这些值,编写明确的函数名称或在通配符和空数组之间切换,但没有运气。根据我读到的博客,这也并不重要,因为我的 .psm1 导出了成员。它只与自动加载 cmdlet 相关,我并不介意。
这在 Azure 自动化中的工作方式不应该像在本地一样工作吗?还是我正在监督某些事情?
我的 zip 文件夹结构如下所示:
MHZ.Developer.zip
├── MHZ.Developer.psd1
├── MHZ.Developer.psm1
│ ├── functions
│ │ ├── Get-FooBaa.ps1
使用 zip 中的模块名称创建另一个文件夹不会产生任何影响。上传后,模块始终在路径下可用
C:\usr\src\PSModules\MHZ.Developer\MHZ.Developer.psm1
将
FunctionsToExport
更改为:
FunctionsToExport = @(
'Get-Function1',
'Get-Function2',
'Get-Function3'
)
也没有什么区别。
通过评论的帮助,我可以找到解决方案并回答我自己的问题。
尽管在本地工作,但我必须从 .psm1 中删除
Export-ModuleMember
并在 .psd1 中设置 FunctionsToExport
以使模块在 Azure 自动化中工作。