远程导入PowerShell模块失败:BadImageFormatException错误求助
解决远程导入MSOnline模块时的BadImageFormatException错误
问题描述
远程导入MSOnline模块时触发以下错误,但本地32位、64位PowerShell均可正常导入该模块:
Import-Module : Could not load file or assembly 'file:///C:\Users\CAC-Dev\Documents\WindowsPowerShell\Modules\MSOnline\1.1.183.66\Microsoft.Online.Administration.Automation.PSModule.dll' or one of its dependencies. An attempt was made to load a program with an incorrect format.
At line:1 char:1
- Import-Module MSOnline
- CategoryInfo : InvalidOperation: (:) [Import-Module], BadImageFormatException
- FullyQualifiedErrorId : FormatXmlUpdateException,Microsoft.PowerShell.Commands.ImportModuleCommand
核心原因
错误源于PowerShell远程会话架构与模块DLL架构不匹配:远程会话默认使用的32位/64位PowerShell版本,和MSOnline模块的编译架构不一致。
解决步骤
检查当前远程会话架构
在远程会话中执行命令,确认当前会话的位数:[Environment]::Is64BitProcess返回
True为64位会话,False为32位会话。启动对应架构的远程会话
- 若模块为64位,从本地发起远程连接时指定64位配置:
Enter-PSSession -ComputerName <远程主机名> -ConfigurationName Microsoft.PowerShell64 - 若模块为32位,指定32位配置:
Enter-PSSession -ComputerName <远程主机名> -ConfigurationName Microsoft.PowerShell32
进入对应架构的会话后,重新尝试导入模块即可。
- 若模块为64位,从本地发起远程连接时指定64位配置:
验证模块DLL的架构
若不确定模块位数,可在远程主机执行以下命令(需先安装PE模块:Install-Module -Name PE):Get-Item "C:\Users\CAC-Dev\Documents\WindowsPowerShell\Modules\MSOnline\1.1.183.66\Microsoft.Online.Administration.Automation.PSModule.dll" | Get-PEHeader | Select-Object MachineType- 返回
IMAGE_FILE_MACHINE_AMD64表示64位模块 - 返回
IMAGE_FILE_MACHINE_I386表示32位模块
- 返回
确认远程主机模块路径配置
检查远程主机的模块路径是否包含目标模块目录,避免加载其他位置的错误版本:$env:PSModulePath若目标路径不在其中,可临时添加:
$env:PSModulePath += ";C:\Users\CAC-Dev\Documents\WindowsPowerShell\Modules\"
内容的提问来源于stack exchange,提问作者Anantha
相关产品推荐
相关产品推荐

