2010-08-17 8 views
3

Я пытаюсь написать сценарий PowerShell, который будет автоматизировать развертывание моего IIS-сайта. Я пытаюсь запустить сценарии на моей машине Windows Server 2008 R2, при 32-битном в:Windows PowerShell Snap-In для IIS не работает на 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, которая не является не-г o для меня.

Любая идея, как я могу это преодолеть? Заранее спасибо.

+0

Это был ясный ответ, который устранил проблему для меня - https://stackoverflow.com/a/6872000/852806 – HockeyJ

ответ

-1

Просто для подключения точек. «Urig» ответил на свой вопрос в другой теме: TFS Power Tools 2008 Powershell Snapin won't run in on 64-bit in Windows 2008 R2

«Cathy Kong от Microsoft был достаточно любезен, чтобы предоставить мне обходной путь для этого вопроса Полную информацию можно найти здесь в PowerTools форуме MSDN TFS:. http://social.msdn.microsoft.com/Forums/en-US/tfspowertools/thread/a116799a-0476-4c42-aa3e-45d8ba23739e/?prof=required

исправление следующим образом и работает хорошо для меня:

Пожалуйста, сохраните следующее содержимое и сохранить его как * .reg файл и импортировать в реестр (просто дважды щелкните * .reg файл, нажмите кнопку OK дважды)

Редактор реестра Windows Version 5.00

[HKEY_LOCAL_MACHINE \ SOFTWARE \ Microsoft \ PowerShell \ 1 \ PowerShellSnapIns \ Microsoft.TeamFoundation.PowerShell] "PowerShellVersion" = "2.0", "Поставщик" = "Microsoft Corporation", "Описание" = "Это является PowerShell оснастки который включает командлеты Team Foundation Server. "" VendorIndirect "=" Microsoft.TeamFoundation.PowerShell, Microsoft "" DescriptionIndirect "=" Microsoft.TeamFoundation.PowerShell, это оснастка PowerShell, которая включает командлеты Team Foundation Server. "" Версия "=" 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 "

+0

Нет, ответ на другой вопрос здесь не уместен. Один из них касается оснастки PowerShell TFS, не работающей под x64; это касается модуля IIS, который не работает под x86 как WOW64. Легко запутался, но нет. – piers7

4

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

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

фактически загружает 32 битную версия PowerShell ;-)

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

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

ps> [intptr]::size 
4 

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

-Oisin

+1

Я думаю, что проблема, с которой он сталкивается, заключается в том, что он хочет использовать TFS Snapin (только для 32-разрядных) в сочетании с модулем WebAdmin, который * появляется * только для 64-разрядных. –

2

Одна вещь, вы можете попробовать это загрузить 64-битную PowerShell, как говорит Oisin, а затем использовать Start-Job -RunAs32 выполнить скрипт, который загружает PowerTools TFS snapin и при необходимости выполняет командлеты 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 
+0

Еще раз спасибо за то, что установил меня прямо Кейт. Я отредактировал свой вопрос, чтобы отразить вашу коррекцию. Я все еще в недоумении относительно того, как я могу работать с IIS PSProvider и TFS Power Tools PSSnapin для совместной работы. Есть идеи? – urig

+0

Я не знаю, как загрузить 32-разрядную snapin в * тот же самый сеанс PowerShell как 64-разрядную snapin. За исключением использования 32-битного фонового задания, как объяснено в моем ответе. –

1

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

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