代码之家  ›  专栏  ›  技术社区  ›  urig

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

  •  3
  • urig  · 技术社区  · 15 年前

    我正在尝试编写一个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
    

    切换到PowerShell.exe的64位版本解决了这个问题,但使我不可能也使用微软Team Foundation Server 2008动力工具PSSNAPIN,这对我来说是不可行的。

    知道我怎么克服这个吗?事先谢谢。

    5 回复  |  直到 7 年前
        1
  •  -1
  •   Community CDub    8 年前

    只是为了连接点。”乌里格在另一个话题中回答了自己的问题: 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-LoalAlxMe]软件\微软\ PosithSalpin \微软.Team Foundation。PosithBoe] =“2”“卖主”=“微软公司”“描述”=“这是一个PuthSeam快照,其中包括Team Foundation Server CMDLew”“vound-RealdIn”=“微软.Team Foundation,PowerShell,微软”“描述间接”=“微软。Team Foundation。PowerShell,这是一个PosithSeam管理单元,其中包括Team Foundation Server CMDLe..[“版本”=“0.0.0.0”“Apple Studio”=“C:\程序文件(x86)\微软Team Foundation Server 2010动力工具”“ActudiNeam”=“MyStut.Team Foundation .PotoTooS.PosikSeam,版本=0.0.0.0,Cule=中立,Puffic KealToeK= B03F5”。F7F11D50A3A“模块名”=“C:\程序文件(x86)\微软Team Foundation Server 2010动力工具\微软.Team Foundation .PooToals.PosikSt.DLL”“CuppsSnAPIN Type”=“微软.Team Foundation .PooTooal.PopeS壳. TFPSSnapIn”

        2
  •  4
  •   x0n    15 年前

    运行:

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

    实际加载 32位 PowerShell版本;-)

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

    您可以这样验证:

    ps> [intptr]::size
    4
    

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

    -奥辛

        3
  •  2
  •   Keith Hill    15 年前

    您可能会尝试加载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
    
        4
  •  1
  •   cheekoli    13 年前

    对于以后发现这个问题的人,我想补充一点,您应该仔细检查一下如何启动PowerShell。我也遇到了同样的错误,我不明白为什么这些解决方案都是关于64位版本的,当时我还以为自己是64位版本的。

    结果发现,因为我使用第三方32位启动程序运行PowerShell,所以PowerShell正在回滚到32位可执行文件,尽管它是从system32文件夹启动的。感谢X0N确认我使用的版本的方法,因为这将引导我找到我的解决方案。

        5
  •  0
  •   Karthic Srinivasan    7 年前

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

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

    只需使用上述命令调用PowerShell 64位版本,并向其传递带有参数的脚本路径。