在 Azure 函数中,我尝试加载 PowerShell 模块,但收到相同的错误 Assembly 名称已加载。
代码示例
Import-Module "D:\home\site\wwwroot\HelloWorld\modules\MsrcSecurityUpdates\1.7.2\MsrcSecurityUpdates.psd1"
错误消息
Import-Module : Assembly with same name is already loaded
At C:\home\site\wwwroot\HelloWorld\run.ps1:25 char:5
+ Import-Module "D:\home\site\wwwroot\HelloWorld\modules\MsrcSecuri ...
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : InvalidOperation: (:) [Import-Module], FileLoadException
+ FullyQualifiedErrorId : FormatXmlUpdateException,Microsoft.PowerShell.Commands.ImportModuleCommand
一些额外的背景..
此代码昨天有效。我已经进行了大量编辑,因此无法清楚地说明昨天运行的相同代码现在失败了。
我直接通过浏览器编辑代码。
我已重新启动 Web 应用程序,以可能清除我的代码期间加载的任何程序集。没有什么区别。
我通过以下命令检查了该模块是否可用,该命令返回 MsrcSecurityUpdates 未安装。
if (-not (Get-Module -Name "MsrcSecurityUpdates"))
{
Write-Output "MsrcSecurityUpdates NOT installed";
}
else
{
Write-Output "MsrcSecurityUpdates YES installed";
}
我下载了该模块
Save-Module -Name MsrcSecurityUpdates -Path "C:\TEMP" -Force
随后使用 Kudo 控制台上传到 Azure Function File Share。按照此 Stackoverflow question 中概述的步骤
最佳答案
此模块似乎与应用程序中的其他模块或与从代码中显式加载的程序集发生冲突。模块内容也可能已损坏。
首先,我建议依赖 Managed Dependencies功能而不是通过 Kudu 上传模块。只需将对模块的引用包含到应用根目录下的 requirements.psd1
文件中即可:
@{
...
'MsrcSecurityUpdates' = '1.*'
}
如果您在门户中编辑此文件,您可能需要重新启动您的应用程序。下次调用任何函数时,该模块的最新版本将从 PowerShell Gallery 自动安装,并在 PSModulePath 上可用,因此您无需指定任何路径即可导入它:
Import-Module MsrcSecurityUpdates
在没有任何其他模块的全新应用程序上尝试此操作:将加载 MsrcSecurityUpdates。但是,如果您仍然收到相同的错误,则意味着 MsrcSecurityUpdates 与您的应用程序正在使用的其他模块发生冲突。您可以通过从应用程序中删除其他模块(包括清理通过 Kudu 上传的模块)并减少代码来缩小范围。
[更新]潜在的解决方法:
- 尝试以特定的固定顺序导入(
Import-Module
)模块,以确保首先加载最新的程序集版本。这可能有帮助,也可能没有帮助,具体取决于模块的设计。 - 尝试在单独的进程中从其中一个模块执行命令(使用 PowerShell 作业或 session ,甚至调用 pwsh.exe)。
关于azure - 在 Azure 函数中执行导入模块时已加载同名程序集的错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62484966/