我正在尝试编写一个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,这对我来说是不行的。
知道如何克服这个问题吗?提前谢谢。
答案 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“