私のアプリケーションの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サービスに使用されるコードは、同じサーバー上で別のツールとして正常に実行およびテストされており、開発者のマシンでも問題なく実行されています。
これらの調査により、サービス自体になんらかの問題があると考えられますが、何が/なぜなのかわかりません。
ありがとうございました。
問題が見つかりました。プロジェクトのプロパティでターゲットプラットフォームのビルドパラメーターを「32ビット優先」に変更すると、問題が解決しました。