Оснастка Windows PowerShell для IIS не работает на 32-разрядной версии? - PullRequest
3 голосов
/ 17 августа 2010

Я пытаюсь написать сценарий 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 Power Foundation Server 2008 Power Tools PSSnapin, что для меня не разрешено.

Есть идеи, как мне это преодолеть? Заранее спасибо.

Ответы [ 5 ]

6 голосов
/ 17 августа 2010

Продолжительность:

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

на самом деле загружает 32-битную версию powershell; -)

Это явно не то, что вы хотите. Запустите версию в system32, чтобы получить 64-битную версию. Да, действительно.

Вы можете проверить это как:

ps> [intptr]::size
4

Если он возвращает 4, он 32-битный. 64-разрядный PowerShell вернет 8.

-Oisin

2 голосов
/ 18 августа 2010

Одна вещь, которую вы можете попробовать, это загрузить 64-битную PowerShell, как говорит Ойсин, и затем использовать Start-Job -RunAs32, чтобы выполнить скрипт, который загружает оснастку TFS PowerTools и при необходимости выполняет командлеты TFS. Обязательно выведите необходимую информацию из команд, которые выполняются в фоновом режиме. Используйте 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
1 голос
/ 19 июня 2018

Открытие PowerShell с помощью следующей команды решило мою проблему:

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

Просто вызовите 64-разрядную версию PowerShell с помощью указанной выше команды и передайте путь сценария с аргументами.

1 голос
/ 20 августа 2012

Для тех, кто найдет это в будущем, я хотел бы добавить, что вы должны дважды проверить, как вы запускаете PowerShell.Я получал ту же ошибку и не мог понять, почему все решения были связаны с использованием 64-битной версии, когда я думал, что я уже был.32-разрядная программа запуска стороннего производителя, откатилась к 32-разрядному исполняемому файлу, несмотря на то что запускалась из папки system32Спасибо x0n за метод подтверждения версии, которую я использовал, так как это привело меня к моему решению.

0 голосов
/ 11 декабря 2010

Просто чтобы соединить точки. «Уриг» ответил на свой вопрос в другой теме: TFS Power Tools 2008 Powershell Snapin не будет работать в 64-битной среде в Windows 2008 R2

"Кэти Конг из Microsoft любезно предоставила мне решение этой проблемы. Полную информацию можно найти на форуме 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. " "VendorIndirect" = "Microsoft.TeamFoundation.PowerShell, Microsoft" "DescriptionIndirect" = "Microsoft.TeamFoundation.PowerShell. Это оснастка PowerShell, включающая командлеты Team Foundation Server." "Version" = "10.0.0.0" "ApplicationBase" = "C: \ Program Files (x86) \ Инструменты управления Microsoft Team Foundation Server 2010" "AssemblyName" = "Microsoft.TeamFoundation.PowerTools.PowerShell, Version = 10.0.0.0, Культура = нейтральная, PublicKeyToken = b03f5f7f11d50a3a "" ModuleName "=" C: \ Program Files (x86) \ Электроинструменты Microsoft Team Foundation Server 2010 \ \. .PowerShell.TFPSSnapIn "

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...