2010-08-17 18 views
3

J'essaie d'écrire un script PowerShell qui automatisera mes déploiements de sites Web IIS. Je suis en train d'exécuter les scripts sur ma machine Windows Server 2008 R2, sous 32 bits:Le composant logiciel enfichable Windows PowerShell pour IIS échoue sur 32 bits?

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

Chaque fois que je lance une commande WebAdministration comme celle-ci:

Get-Website -Name "MYWebsite" 

Je reçois une erreur comme ceci:

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 

le passage à la version 64 bits de PowerShell.exe résout ce problème, mais me rend impossible d'utiliser également la Microsoft Team Foundation Server 2008 Power Tools PSSnapin, qui est un non-g o pour moi.

Une idée de comment je peux surmonter cela? Merci d'avance.

+0

Ce fut une réponse claire qui a résolu le problème pour moi - https://stackoverflow.com/a/6872000/852806 – HockeyJ

Répondre

-1

Juste pour connecter les points. « Urig » répondu à sa propre question dans un autre sujet: TFS Power Tools 2008 Powershell Snapin won't run in on 64-bit in Windows 2008 R2

« Cathy Kong de Microsoft a eu la gentillesse de me fournir une solution à ce problème Les détails peuvent être trouvés ici dans le forum PowerTools TFS MSDN:. http://social.msdn.microsoft.com/Forums/en-US/tfspowertools/thread/a116799a-0476-4c42-aa3e-45d8ba23739e/?prof=required

le correctif est la suivante et a bien fonctionné pour moi:

S'il vous plaît enregistrer le contenu ci-dessous et l'enregistrer comme fichier * .reg et l'importation au Registre (il suffit de double cliquer sur le fichier * .reg, cliquez sur OK Double)

Éditeur du registre de Windows Version 5.00

[HKEY_LOCAL_MACHINE \ SOFTWARE \ Microsoft \ \ PowerShell 1 \ PowerShellSnapIns \ Microsoft.TeamFoundation.PowerShell] "PowerShellVersion" = "2.0" "fournisseur" = "Microsoft Corporation" "Description" = "Ceci est un composant logiciel enfichable PowerShell Cela inclut les applets de commande Team Foundation Server. "" VendorIndirect "=" Microsoft.TeamFoundation.PowerShell, Microsoft "" DescriptionIndirect "=" Microsoft.TeamFoundation.PowerShell, il s'agit d'un composant logiciel enfichable PowerShell qui inclut les applets de commande Team Foundation Server. "" Version "=" 10.0.0.0 "" ApplicationBase "=" Outils C: \ Program (x86) \ Microsoft Team Foundation Server 2010 "" AssemblyName "=" Microsoft.TeamFoundation.PowerTools.PowerShell, Version = 10.0.0.0, Culture = neutre, PublicKeyToken = b03f5f7f11d50a3a "" NomModule "=" C: \ Program Files (x86) \ Microsoft Team Foundation Server 2010 Power Tools \ Microsoft. TeamFoundation.PowerTools.PowerShell.dll "" CustomPSSnapInType "=" Microsoft.TeamFoundation.PowerTools.PowerShell.TFPSSnapIn "

+0

Non, la réponse à l'autre question n'est pas pertinente ici. L'un concerne le composant logiciel enfichable PowerSell TFS qui ne fonctionne pas sous x64; c'est à propos du module IIS ne fonctionnant pas sous x86 comme WOW64. Facilement confus, mais non. – piers7

4

Course à pied:

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

charge en fait le 32 bits version de Powershell ;-)

Ce évidemment pas ce que vous voulez. Exécutez la version dans system32 pour obtenir la version 64 bits. Oui vraiment.

Vous pouvez vérifier cela comme:

ps> [intptr]::size 
4 

Si elle retourne 4, il est 32 bits. 64 bits powershell retourne 8.

-Oisin

+1

Je pense que le problème qu'il rencontre est qu'il veut utiliser le Snapin TFS (32 bits seulement) en conjonction avec le module WebAdmin qui * semble * être 64 bits seulement. –

2

Une chose que vous pourriez essayer est de charger un 64 bits PowerShell comme Oisin dit et puis utilisez Start-Job -RunAs32 d'exécuter le script qui charge les PowerTools TFS snapin et exécute les cmdlets TFS si nécessaire. Assurez-vous de fournir une information requise à partir des commandes qui s'exécutent dans le travail en arrière-plan. Utilisez Wait-Job pour attendre la fin de l'opération, puis utilisez Receive-Job pour récupérer les données du côté 32 bits dans votre session PowerShell 64 bits principale, par exemple.

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

Merci encore de m'avoir arrangé Keith. J'ai modifié ma question pour refléter votre correction. Je ne sais toujours pas comment faire pour que IIS PSProvider et TFS Power Tools PSSnapin travaillent ensemble. Des idées? – urig

+0

Je ne connais aucun moyen de charger un snapin 32 bits dans la même session PowerShell qu'un snapin 64 bits. À l'exception de l'utilisation d'un travail en arrière-plan 32 bits comme expliqué dans ma réponse. –

1

Pour ceux qui trouvent cela dans le futur, je voudrais ajouter que vous devriez vérifier comment vous lancez powershell Je recevais la même erreur, et je n'arrivais pas à comprendre pourquoi les solutions étaient toutes en référence à l'utilisation de la version 64 bits, alors que je pensais que c'était déjà le cas:

Il se trouve que parce que je courais powershell avec un lanceur tiers 32 bits, powershell retombait à l'exécutable 32 bits, malgré le lancement à partir du dossier system32. Merci à x0n pour la méthode de confirmation de la version que j'utilisais, car cela m'a conduit à ma solution.