Para una de mis aplicaciones, tengo un servicio de Windows (en Windows Server 2012 R2 x64) cuya función es ejecutar muchos trabajos en diferentes horarios y activadores. Uno de ellos es restablecer una contraseña de usuario en Office 365. El servidor en el que se ejecuta el servicio tiene instalado Microsoft Online Services Sign-in Assistant y Microsoft Azure Active Directory Module para Windows PowerShell (MSOnline versión 1.1.166.0).

Desde PowerShell puedo llamar con éxito a lo siguiente con mi usuario.

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

Si ejecuto PowerShell como la cuenta con la que se inicia mi servicio, también funciona bien. La ejecución de la función de restablecimiento de contraseña desde el servicio de Windows falla con el siguiente mensaje:

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.

Agregar un indicador de depuración a la importación del módulo en el código nos permitió arrastrar el problema al comando import-module MSOnline. Obtuvimos el error:

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

Ya intentamos quitar y reinstalar en la versión x64 las dos herramientas (Asistente de inicio de sesión de Microsoft Online Services y el Módulo de Microsoft Azure Active Directory para Windows PowerShell). La variable de sistema "PATH" es correcta con:% SystemRoot% \ system32;% SystemRoot%;% SystemRoot% \ System32 \ Wbem;% SYSTEMROOT% \ System32 \ WindowsPowerShell \ v1.0 \; C: \ Archivos de programa \ Microsoft \ Web Platform Instalador \

La carpeta C: \ Windows \ System32 \ WindowsPowerShell \ v1.0 \ Modules tiene las subcarpetas del módulo MSOL MSOnline y MSOnlineExtended

La copia de las dos carpetas en C: \ Windows \ sysWOW64 \ WindowsPowerShell \ v1.0 \ Modules como se informa como solución en muchos otros temas falla aquí con el siguiente error:

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 

El código utilizado para el servicio de Windows se ha ejecutado y probado con éxito como una herramienta separada en el mismo servidor y el código también se ha ejecutado sin problemas en una máquina de desarrollo.

Estas investigaciones nos llevan a pensar que hay algún tipo de problema con el servicio en sí, pero no podemos averiguar qué / por qué.

Gracias.

answer

Hemos encontrado el problema. Cambiar el parámetro de construcción de la plataforma de destino a "Preferir 32 bits" en las propiedades del proyecto resolvió el problema.