Я вижу пример сценария, который вы связали, загружает эту DLL из GAC:
[System.reflection.Assembly]::LoadWithPartialName("Microsoft.BizTalk.ExplorerOM")
Я не знаком с этой сборкой, но если она предварительно скомпилирована в x86 в GAC, вам необходимо загрузить ее с 32-битной PowerShell (в 64-битной системе Windows). В вашем скрипте вы можете проверить, что такое битность процесса PowerShell:
if ( [IntPtr]::Size -eq 4 ) { # x86 } else { # x64 }
Если ваш скрипт не работает с нужной битностью, я могу подумать о трех вещах:
- Запустите 32-битное фоновое задание, как вы заметили
Перезапустите ваш скрипт, используя 32-битную PowerShell (не работает, если у вашего скрипта есть параметры):
if (-not $correctBitness) {
Start-Process "C:\WINDOWS\syswow64\windowspowershell\v1.0\powershell.exe" -ArgumentList "-file", $Invocation.MyCommand.Path
exit
}
- Скажите пользователю, что ему нужно перезапустить скрипт, используя 32-битную PowerShell, и выйти.