用于IIS的Windows PowerShell管理单元在32位上失败?

时间:2010-08-17 09:20:18

标签: iis powershell tfs-power-tools web-admin

我正在尝试编写一个PowerShell脚本来自动化我的IIS网站部署。我正在尝试在我的Windows Server 2008 R2计算机上运行脚本,位于32位:

C:\Windows\SysWOW64\WindowsPowerShell\v1.0\powershell.exe

每当我运行WebAdministration命令时,例如:

Get-Website -Name "MYWebsite"

我收到这样的错误:

Get-Website : Retrieving the COM class factory for component with CLSID {688EEE
E5-6A7E-422F-B2E1-6AF00DC944A6} failed due to the following error: 80040154.
At line:1 char:12
+ Get-Website <<<<  -Name "MyWebsite"
    + CategoryInfo          : NotSpecified: (:) [Get-Website], COMException
    + FullyQualifiedErrorId : System.Runtime.InteropServices.COMException,Micr
   osoft.IIs.PowerShell.Provider.GetWebsiteCommand

切换到64位版本的PowerShell.exe可以解决此问题,但是我也无法使用Microsoft Team Foundation Server 2008 Power Tools PSSnapin,这对我来说是不行的。

知道如何克服这个问题吗?提前谢谢。

5 个答案:

答案 0 :(得分:5)

运行:

C:\Windows\SysWOW64\WindowsPowerShell\v1.0\powershell.exe 

实际上加载了powershell的 32位版本; - )

这显然不是你想要的。在system32中运行该版本以获得64位版本。对真的。

您可以对此进行验证:

ps> [intptr]::size
4

如果返回4,则为32位。 64位powershell将返回8.

-Oisin

答案 1 :(得分:2)

您可能尝试的一件事是加载64位PowerShell,如Oisin所说,然后使用Start-Job-RunAs32执行加载TFS PowerTools管理单元的脚本,并根据需要执行TFS cmdlet。确保从后台作业中运行的命令输出所需信息。使用Wait-Job等待它完成,然后使用Receive-Job将数据从32位返回到主64位PowerShell会话,例如。

PS> [IntPtr]::Size
8
PS> $job = Start-Job { [intptr]::size } -RunAs32
PS> Wait-Job $job

Id              Name      State      HasMoreData     Location     Command
--              ----      -----      -----------     --------     -------
3               Job3      Completed  True            localhost    [intptr]::size


PS> Receive-Job $job
4

答案 2 :(得分:1)

对于那些在将来发现这一点的人,我想补充一点,你应该仔细检查你如何启动PowerShell。我得到了同样的错误,并且无法弄清楚为什么解决方案都参考了使用64位版本,当时我以为我已经是。

事实证明,因为我使用第三方32位启动程序运行powershell,所以尽管从system32文件夹启动,但PowerShell仍然会回退到32位可执行文件。感谢x0n确认我正在使用的版本的方法,因为这引导我找到我的解决方案。

答案 3 :(得分:0)

使用以下命令打开powershell解决了我的问题:

%SystemRoot%\sysnative\WindowsPowerShell\v1.0\powershell.exe 

只需使用上述命令调用Powershell 64位版本,并将脚本路径及其参数传递给它。

答案 4 :(得分:-1)

只是连接点。 “urig”在另一个主题中回答了他自己的问题: TFS Power Tools 2008 Powershell Snapin won't run in on 64-bit in Windows 2008 R2

“微软的Cathy Kong非常友好地为我提供了解决此问题的方法。详细信息可以在MSDN TFS PowerTools论坛中找到:http://social.msdn.microsoft.com/Forums/en-US/tfspowertools/thread/a116799a-0476-4c42-aa3e-45d8ba23739e/?prof=required

修复如下,对我来说效果很好:

请保存以下内容并将其另存为* .reg文件并导入到注册表中(只需双击* .reg文件,单击“确定”双击)

Windows注册表编辑器版本5.00

[HKEY_LOCAL_MACHINE \ SOFTWARE \ Microsoft \ PowerShell \ 1 \ PowerShellSnapIns \ Microsoft.TeamFoundation.PowerShell]“PowerShellVersion”=“2.0”“Vendor”=“Microsoft Corporation”“Description”=“这是一个PowerShell管理单元,包括Team Foundation Server cmdlet。“ “VendorIndirect”=“Microsoft.TeamFoundation.PowerShell,Microsoft”“DescriptionIndirect”=“Microsoft.TeamFoundation.PowerShell,这是一个包含Team Foundation Server cmdlet的PowerShell管理单元。” “Version”=“10.0.0.0”“ApplicationBase”=“C:\ Program Files(x86)\ Microsoft Team Foundation Server 2010 Power Tools”“AssemblyName”=“Microsoft.TeamFoundation.PowerTools.PowerShell,Version = 10.0.0.0, Culture = neutral,PublicKeyToken = b03f5f7f11d50a3a“”ModuleName“=”C:\ Program Files(x86)\ Microsoft Team Foundation Server 2010 Power Tools \ Microsoft.TeamFoundation.PowerTools.PowerShell.dll“”CustomPSSnapInType“=”Microsoft.TeamFoundation.PowerTools .PowerShell.TFPSSnapIn“