Для одного из моих приложений у меня есть служба Windows (на Windows Server 2012 R2 x64), роль которой заключается в выполнении множества заданий по разным расписаниям и триггерам. Один из них - сброс пароля пользователя в Office 365. На сервере, на котором работает служба, установлены помощник по входу в Microsoft Online Services и модуль Microsoft Azure Active Directory для Windows PowerShell (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.
Добавление флага отладки к импорту модуля в коде позволило нам перетащить проблему в команду MSOnline import-module. Мы получили ошибку:
The specified module 'MSOnline' was not loaded because no valid module file was found in any module directory.
Мы уже пытались удалить и переустановить в версии x64 два инструмента (помощник по входу в Microsoft Online Services и модуль Microsoft Azure Active Directory для Windows PowerShell). Системная переменная "PATH" верна с: % SystemRoot% \ system32;% SystemRoot%;% SystemRoot% \ System32 \ Wbem;% SYSTEMROOT% \ System32 \ WindowsPowerShell \ v1.0 \; C: \ Program Files \ Microsoft \ Web Platform Installer \
Папка 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-битный» в свойствах проекта решило проблему.