1
votes

We have created a mini web program for running PowerShell in asp.net. the PowerShell command is running fine. but when we try to import the MSOnline module, it will be shown the following error:

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.

Dim Ps As PowerShell = PowerShell.Create()

Dim tempScript As String = "Import-Module MSOnline " + Environment.NewLine
tempScript = tempScript + "$username = 'xxx@xxx.com' " + Environment.NewLine
tempScript = tempScript + "$password = 'abcd1234' " + Environment.NewLine
tempScript = tempScript + "$secureStringPwd = $password | ConvertTo-SecureString -AsPlainText -Force " + Environment.NewLine
tempScript = tempScript + "$creds = New-Object System.Management.Automation.PSCredential -ArgumentList $username, $secureStringPwd " + Environment.NewLine
tempScript = tempScript + "Connect-MsolService -Credential $creds " + Environment.NewLine
tempScript = tempScript + "Get-MsolDomain" + Environment.NewLine

Ps.Commands.AddScript(tempScript)

' Execute the script
Dim results = Ps.Invoke()

PS C:> $PSVersionTable | Out-String

Name                           Value
----                           -----
PSVersion                      4.0
WSManStackVersion              3.0
SerializationVersion           1.1.0.1
CLRVersion                     4.0.30319.34209
BuildVersion                   6.3.9600.17400
PSCompatibleVersions           {1.0, 2.0, 3.0, 4.0}
PSRemotingProtocolVersion      2.2

Update : 3-Aug-2017

Try to use process.start to call a CMD, and then the cmd call a powershell, but it failed also. same error message.

Private Function RunBatch() As String
Dim proc As New Process
Dim strBuilder As StringBuilder = New System.Text.StringBuilder

proc.StartInfo.FileName = "C:\temp\enableMFA.bat"
proc.StartInfo.UseShellExecute = False
proc.StartInfo.RedirectStandardOutput = True
proc.Start()
proc.WaitForExit()

Dim output() As String = proc.StandardOutput.ReadToEnd.Split(CChar(vbLf))
For Each ln As String In output
    strBuilder.Append(ln & vbNewLine + vbLf)
Next

Return strBuilder.ToString

End Function

Error Message:

C:\Users\admin\Desktop\Preview\Preview\bin\Debug>powershell -File "C:\temp\enableMFA.ps1"

Import-Module : 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.

At C:\temp\enableMFA.ps1:1 char:1

  • Import-Module MSOnline

  • ~~~~~~~~~~~~~~~~~~~~~~

    • CategoryInfo : InvalidOperation: (:) [Import-Module], BadImageFormatException

    • FullyQualifiedErrorId : FormatXmlUpdateException,Microsoft.PowerShell.Commands.ImportModuleCommand

1
Most probably a bitness problem? ziaahmedshaikh.wordpress.com/2015/09/11/…David Brabant
i try to call the PowerShell with process.start in VB.NET, also faileduser1172579

1 Answers

4
votes

Finally fixed the issue by change the CPU to x64, this is the steps

  • Right click the project >> properties >> complie >> Target CPU to x64

  • Go to TOOLS >> Options >> Projects and Solutions >> Web Projects >> use 64bit IIS Express

** Remember close the VS2013 and open the project again **

** Thx for the hints from David Brabant**