Azure 自动化自定义模块不导出命令

问题描述 投票:0回答:1

我正在尝试在 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'
)

也没有什么区别。

azure powershell azure-automation powershell-module
1个回答
0
投票

解决方案

通过评论的帮助,我可以找到解决方案并回答我自己的问题。

尽管在本地工作,但我必须从 .psm1 中删除

Export-ModuleMember
并在 .psd1 中设置
FunctionsToExport
以使模块在 Azure 自动化中工作。

© www.soinside.com 2019 - 2024. All rights reserved.