Powershell

未載入指定的模組“MSOnline”,因為在任何模組目錄中都找不到有效的模組文件

  • March 13, 2018

對於我的一個應用程序,我有一個 Windows 服務(在 Windows Server 2012 R2 x64 上),其作用是在不同的計劃和触發器上執行許多作業。其中之一是在 Office 365 上重置使用者密碼。執行該服務的伺服器安裝了 Microsoft Online Services 登錄助手和適用於 Windows PowerShell 的 Microsoft Azure Active Directory 模組(MSOnline 版本 1.1.166.0)。

從 PowerShell 我可以成功地與我的使用者呼叫以下命令。

$> $cred = Get-Credential
$> Connect-MsolService -Credential $cred

如果我執行 PowerShell 作為我的服務啟動的帳戶,它也執行良好。從 Windows 服務執行重置密碼功能失敗,並顯示以下消息:

The term 'Connect-MsolService' is not recognized as the name of a cmdlet, function, script file, or operable program. Check the spelling of the name, or if a path was included, verify that the path is correct and try again.

在程式碼中向模組導入添加調試標誌允許我們將問題拖到 import-module MSOnline 命令。我們得到了錯誤:

The specified module 'MSOnline' was not loaded because no valid module file was found in any module directory.

我們已經嘗試在 x64 版本中刪除並重新安裝這兩個工具(Microsoft Online Services 登錄助手和用於 Windows PowerShell 的 Microsoft Azure Active Directory 模組)。系統變數“PATH”正確:%SystemRoot%\system32;%SystemRoot%;%SystemRoot%\System32\Wbem;%SYSTEMROOT%\System32\WindowsPowerShell\v1.0;C:\Program Files\Microsoft\Web Platform安裝程序\

文件夾 C:\Windows\System32\WindowsPowerShell\v1.0\Modules 具有 MSOL 模組子文件夾 MSOnline 和 MSOnlineExtended

複製 C:\Windows\sysWOW64\WindowsPowerShell\v1.0\Modules 中的兩個文件夾作為許多其他主題的解決方案在此處失敗,並出現以下錯誤:

System.Management.Automation.CmdletInvocationException: Could not load file or assembly 'file:///C:\Windows\system32\WindowsPowerShell\v1.0\Modules\MSOnline\Microsoft.Online.Administration.Automation.PSModule.dll' or one of its dependencies. An attempt was made to load a program with an incorrect format. ---> System.BadImageFormatException: Could not load file or assembly 

用於 Windows 服務的程式碼已作為單獨的工具在同一台伺服器上成功執行和測試,並且程式碼也已在開發人員機器上完美執行。

這些調查使我們認為服務本身存在某種問題,但無法弄清楚是什麼/為什麼。

謝謝你。

我們找到了問題所在。在項目屬性中將目標平台建構參數更改為“首選 32 位”解決了該問題。

引用自:https://serverfault.com/questions/884482