无法通过msbuild获取PowerShell脚本导入模块

时间:2013-08-21 14:42:04

标签: visual-studio-2010 powershell msbuild powershell-v2.0

我在msbuild配置中有一个post build步骤,它执行一个powershell脚本。如果我直接从Powershell调用powershell脚本但是通过msbuild失败了,那么powershell脚本就可以正常工作。

它尝试使用导入中的类似乎失败了:     Import-Module WebAdministration

我收到错误“错误:由于以下错误,检索CLSID {688EEEE5-6A7E-422F-B2E1-6AF00DC944A6}组件的COM类工厂失败:80040154类未注册(HRESULT异常:0x80040154(REGDB_E_CLASSNOTREG) )“

我已经尝试将msbuild加载的powershell版本从64位更改为32位,但没有区别。

这是msbuild步骤:

<Target Name="DevPostBuild">
<PropertyGroup>
  <PowerShellExe Condition=" '$(PowerShellExe)'=='' ">%SystemRoot%\system32\WindowsPowerShell\v1.0\powershell.exe</PowerShellExe>
  <ScriptLocation Condition=" '$(ScriptLocation)'=='' ">$(ProjectDir)DevPostBuild.ps1</ScriptLocation>
</PropertyGroup>
<Message Text="$(ScriptLocation)" />
<Exec Condition="Exists($(ScriptLocation))" Command="$(PowerShellExe) -NonInteractive -executionpolicy Unrestricted -command &quot;&amp; { &amp;'$(ScriptLocation)' } &quot;" />

我在64位机器上使用VS2010。

谢谢!

2 个答案:

答案 0 :(得分:0)

Visual Studio 2010是一个32位进程。然后,Powershell将作为32位进程运行。 WebAdministration模块仅为64位。尝试将%SystemRoot%\syswow64\WindowsPowerShell\v1.0\powershell.exe用于PowerShellExe

答案 1 :(得分:0)

与Visual Studio 2017中的相同,使用syswow64的powershell.exe没有区别。从MSBuild XML中控制IIS时,我遇到了类似的挑战,并且遇到有关未注册的小节的错误消息。 Stop-WebAppPool和Stop-Website因此在MSBuild XML中是无用的,因为它们全部来自WebAdministration模块,而没有提及IISAdministration模块中的Stop-IISSite。

就我而言,我必须利用IIS的旧的好AppCmd可执行文件。工作顺利,没有问题。我还遇到了应用程序池和网站已经停止的情况,所以请注意我会忽略任何错误代码。

<Exec Command="$(WinDir)\SysWOW64\inetsrv\appcmd.exe stop apppool /apppool.name:&quot;My Application Pool&quot;" IgnoreExitCode="true" />
<Exec Command="$(WinDir)\SysWOW64\inetsrv\appcmd.exe stop site /site.name:&quot;My Web Site&quot;" IgnoreExitCode="true" />