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

IIS的Windows PowerShell管理单元在32位上失败?,iis,powershell,tfs-power-tools,web-admin,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

我正在尝试编写一个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
Get-Website:检索具有CLSID{688EEE的组件的COM类工厂
E5-6A7E-422F-B2E1-6AF00DC944A6}由于以下错误而失败:80040154。
第1行字符:12
+让网站运行:

C:\Windows\SysWOW64\WindowsPowerShell\v1.0\powershell.exe 
实际加载32位版本的powershell;-)

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

您可以通过以下方式进行验证:

ps> [intptr]::size
4
如果返回4,则为32位。64位powershell将返回8


-Oisin

您可以尝试的一件事是按照Oisin的说法加载64位PowerShell,然后使用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

只是为了连接点。“乌里格”在另一个话题中回答了自己的问题:

“Microsoft的Cathy Kong非常友好地为我提供了解决此问题的方法。详细信息可在MSDN TFS PowerTools论坛中找到:

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

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

Windows注册表编辑器5.00版


[HKEY-LoalAxMault\\PosikS\PosikS\\PosithSeaPipp\\Team Foundation,PosikScript ] PosithSelp=“2”“卖主”=“微软公司”“描述”=“这是一个PopeSkar快照,其中包括Team Foundation Server CMDLew”“vound-RealdIn”=“微软.Team Foundation,PowerShell,微软”。“=”微软.Team Foundation。PowerShell,这是一个PosithSeam管理单元,其中包括Team Foundation Server CMDLew。“”版本“=“0.0.0.0”“Apple Studio”=“C:\程序文件(x86)\微软Team Foundation Server 2010动力工具”“ActudiNeam”=“MyFas.Team Foundation,PosithOrth.PosithSeam,版本=0.0.0.0,Cule=中性,PuxKyToCKE= B03F5F7F11D50A3A”“C:\程序文件(x86)\微软Team Foundation Server 2010动力工具\微软.Team Foundation .PooToals.PosikSule.DLL”“SuppsSnAPIN Type”=“MyStound.Team Foundation .Poto TooS.PosiSelp.TfPSnAPPin”“

对于将来发现此问题的用户,我想补充一点,您应该仔细检查如何启动powershell。我也遇到了同样的错误,无法理解为什么解决方案都是使用64位版本的,而我认为我已经是了


事实证明,由于我使用第三方32位启动器运行powershell,powershell会退回到32位可执行文件,尽管它是从system32文件夹启动的。感谢x0n提供了确认我使用的版本的方法,因为这将引导我找到解决方案。

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

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

只需使用上述命令调用powershell 64位版本,并将带有参数的脚本路径传递给它。

我认为他遇到的问题是,他希望将TFS管理单元(仅32位)与似乎仅64位的WebAdmin模块结合使用。再次感谢您为我设置了直截了当的Keith。我编辑了我的问题以反映你的更正。我仍然不知道如何让IIS PSProvider和TFS电动工具PSSnapin一起工作。有什么想法吗?我知道没有办法在与64位管理单元相同的PowerShell会话中加载32位管理单元。除了我在回答中解释的使用32位后台工作之外。不,其他问题的答案在这里不相关。一个是关于TFS powershell管理单元不能在x64下工作;这是关于IIS模块在x86下不能作为WOW64工作的问题。容易混淆,但不是。这是一个明确的答案,解决了我的问题-