web-dev-qa-db-ja.com

モジュールディレクトリに有効なモジュールファイルが見つからなかったため、指定されたモジュール 'MSOnline'はロードされませんでした

私のアプリケーションの1つには、Windowsサービス(Windows Server 2012 R2 x64)があります。この役割は、さまざまなスケジュールとトリガーで多くのジョブを実行することです。それらの1つは、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.

2つのツール(Microsoft Online ServicesサインインアシスタントとWindows PowerShell用のMicrosoft Azure Active Directoryモジュール)をx64バージョンで削除して再インストールしようとしました。システム変数「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の2つのフォルダーをコピーすると、次のエラーで失敗します。

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サービスに使用されるコードは、同じサーバー上で別のツールとして正常に実行およびテストされており、開発者のマシンでも問題なく実行されています。

これらの調査により、サービス自体になんらかの問題があると考えられますが、何が/なぜなのかわかりません。

ありがとうございました。

5
cyrilv

問題が見つかりました。プロジェクトのプロパティでターゲットプラットフォームのビルドパラメーターを「32ビット優先」に変更すると、問題が解決しました。

0
cyrilv