Resolución de problemas de implementación de EC2/en las instalaciones
Temas
Error de falta de credenciales en el complemento de CodeDeploy CommandPoller
La implementación produce un error con el mensaje “Validation of PKCS7 signed message failed”
Las rutas de archivo largas provocan el error “No existe tal archivo o directorio”
Los procesos de larga duración pueden producir un error en la implementación
Solución de problemas cuando se omiten todos los eventos del ciclo de vida
nota
Las causas de muchos errores de implementación pueden identificarse revisando los archivos log creados durante el proceso de implementación. Para simplificar, le recomendamos que utilice Registros de Amazon CloudWatch para monitorizar de forma centralizada los archivos de registro, en lugar de hacerlo en cada instancia. Para obtener más información, consulte Ver los registros de CodeDeploy en la consola de Registros de CloudWatch
sugerencia
Para obtener un manual de procedimientos que automatice muchas tareas de solución de problemas relacionadas con las implementaciones de EC2/en las instalaciones, consulte AWSSupport-TroubleshootCodeDeploy en Referencia del manual de procedimientos de AWS Systems Manager.
Error de falta de credenciales en el complemento de CodeDeploy CommandPoller
Si aparece un error similar a InstanceAgent::Plugins::CodeDeployPlugin::CommandPoller: Missing credentials - please
check if this instance was started with an IAM instance profile, podría deberse a una de las siguientes causas:
-
La instancia en la que va a implementar no tiene un perfil de instancia de IAM asociado.
-
El perfil de instancia de IAM no tiene configurados los permisos correctos.
Un perfil de instancia de IAM concede permiso al agente de CodeDeploy para comunicarse con CodeDeploy y para descargar la revisión desde Amazon S3. Para las instancias EC2, consulte Administración de identidades y accesos para AWS CodeDeploy. En el caso de las instancias locales, consulte Working with On-Premises Instances.
La implementación produce un error con el mensaje “Validation of PKCS7 signed message failed”
Este mensaje de error indica que la instancia está ejecutando una versión del agente de CodeDeploy que solo admite el algoritmo hash SHA-1. La compatibilidad con el algoritmo hash SHA-2 se introdujo en la versión 1.0.1.854 del agente de CodeDeploy, publicada en noviembre de 2015. A partir del 17 de octubre de 2016, las implementaciones producen un error si se instala una versión del agente de CodeDeploy anterior a la 1.0.1.854. Para obtener más información, consulte AWSAWS to Switch to SHA256 Hash Algorithm for SSL Certificates
La implementación o la reimplementación de los mismos archivos en la misma instancia producen el error "The deployment failed because a specified file already exists at this location"
Cuando CodeDeploy intenta implementar un archivo en una instancia, pero ya existe un archivo con el mismo nombre en la ubicación de destino especificada, la implementación en dicha instancia podría producir un error. Es posible que aparezca el mensaje de error "The deployment failed because a specified file already exists at this location: nombre-ubicación" (Se produjo un error en la implementación porque un archivo especificado ya existe en esta ubicación: nombre-ubicación). Esto se debe a que durante cada implementación CodeDeploy elimina primero todos los archivos de la implementación anterior, que se enumeran en un archivo de registro de limpieza. Si hay archivos en las carpetas de instalación de destino que no figuran en este archivo de limpieza, el agente de CodeDeploy interpreta esto como un error de forma predeterminada y la implementación produce un error.
nota
En las instancias de Amazon Linux, RHEL y Ubuntu Server, el archivo de limpieza se encuentra en /opt/codedeploy-agent/deployment-root/deployment-instructions/. En las instancias de Windows Server, la ubicación es C:\ProgramData\Amazon\CodeDeploy\deployment-instructions\.
La forma más sencilla de evitar este error es especificar una opción distinta del comportamiento de error predeterminado de la implementación. Para cada implementación, puede elegir si la implementación produce un error, si se sobrescriben los archivos no incluidos en el archivo de limpieza o si se conservan los archivos que ya están en la instancia.
La opción de sobrescritura resulta útil cuando, por ejemplo, coloca manualmente un archivo en una instancia después de la última implementación, pero después añade un archivo con el mismo nombre a la siguiente revisión de la aplicación.
Puede elegir la opción de conservación para los archivos que coloca en la instancia que desea que formen parte de la siguiente implementación sin tener que añadirlos al paquete de revisión de la aplicación. La opción de conservación también es útil si los archivos de la aplicación ya están en el entorno de producción y desea implementarlos utilizando CodeDeploy por primera vez. Para obtener más información, consulte Creación de una implementación en una plataforma de informática de EC2/en las instalaciones (consola) y Comportamiento de la restauración con contenido existente.
Solución de errores de implementación The deployment failed because a specified file already exists at
this location
Si decide no especificar una opción para sobrescribir o conservar el contenido que CodeDeploy detecta en las ubicaciones de implementación de destino (o si no se especifica ninguna opción de implementación para el tratamiento del contenido existente en un comando del código), puede elegir solucionar el error.
Esta información se aplica únicamente si decide no conservar ni sobrescribir el contenido.
Si intenta volver a implementar archivos con los mismos nombres y ubicaciones, la nueva implementación tendrá más probabilidades de que se realice con éxito si especifica el nombre de aplicación y el grupo de implementación con el mismo ID del grupo de implementación subyacente que usó anteriormente. CodeDeploy utiliza el ID del grupo de implementación subyacente para identificar los archivos que se deben eliminar antes de volver a realizar la implementación.
La implementación de nuevos archivos o la reimplementación de los mismos archivos en las mismas ubicaciones de las instancias pueden producir un error por estas razones:
-
Ha especificado un nombre de aplicación distinto para la reimplementación de la misma revisión en las mismas instancias. La nueva implementación produce un error porque aunque el nombre del grupo de implementaciones sea el mismo, el uso de un nombre de aplicación diferente significa que se está usando un ID de grupo de implementaciones subyacente distinto.
-
Ha eliminado y ha vuelto a crear un grupo de implementaciones para una aplicación y, a continuación, ha intentado volver a implementar la misma revisión en el grupo de implementaciones. La nueva implementación produce un error porque aunque el nombre del grupo de implementación sea el mismo, CodeDeploy hace referencia a un ID de grupo de implementación subyacente distinto.
-
Ha eliminado una aplicación y un grupo de implementación en CodeDeploy y, a continuación, ha creado una nueva aplicación y grupo de implementación con los mismos nombres que los que ha eliminado. A continuación, ha intentado implementar de nuevo una revisión que se había implementado en el grupo de implementaciones anterior en el nuevo grupo con el mismo nombre. La nueva implementación produce un error porque aunque los nombres de la aplicación y del grupo de implementación sean los mismos, CodeDeploy sigue haciendo referencia al ID del grupo de implementación que ha eliminado.
-
Ha implementado una revisión en un grupo de implementaciones y después ha implementado la misma revisión en otro grupo de implementaciones en las mismas instancias. La segunda implementación produce un error porque CodeDeploy hace referencia a un ID de grupo de implementación subyacente distinto.
-
Ha implementado una revisión en un grupo de implementaciones y después ha implementado otra revisión en otro grupo de implementaciones en las mismas instancias. Hay al menos un archivo con el mismo nombre y en la misma ubicación en la que el segundo grupo de implementaciones intenta realizar la implementación. La segunda implementación produce un error porque CodeDeploy no elimina el archivo existente antes de que comience la segunda implementación. Ambas implementaciones hacen referencia a identificadores de grupo de implementaciones diferentes.
-
Ha implementado una revisión en CodeDeploy, pero hay al menos un archivo con el mismo nombre y en la misma ubicación. La implementación produce un error porque, de forma predeterminada, CodeDeploy no elimina el archivo existente antes de que comience la segunda implementación.
Para solucionar estas situaciones, proceda del modo siguiente:
-
Elimine los archivos de las ubicaciones e instancias en las que aplicaron anteriormente implementaciones e intente realizar de nuevo la implementación.
-
En el archivo AppSpec de la revisión, en los eventos del ciclo de vida de la implementación ApplicationStop o BeforeInstall, especifique un script personalizado para eliminar los archivos de todas las ubicaciones que coincidan con los archivos que la revisión va a instalar.
-
Implemente o reimplemente los archivos en ubicaciones o instancias que no formaron parte de implementaciones anteriores.
-
Antes de eliminar una aplicación o un grupo de implementaciones, implemente una revisión que contenga un archivo AppSpec que especifique que no se copie ningún archivo en las instancias. Para la implementación, especifique el nombre de aplicación y el nombre del grupo de implementaciones que usan los mismos identificadores de aplicación y grupo de implementaciones que los que está a punto de eliminar. (Puede utilizar el comando get-deployment-group para recuperar el ID del grupo de implementación). CodeDeploy utiliza archivo AppSpec y el ID del grupo de implementación subyacente para eliminar todos los archivos que se instalaron en la implementación anterior realizada correctamente.
Las rutas de archivo largas provocan el error “No existe tal archivo o directorio”
En el caso de las implementaciones en instancias de Windows, si tiene una ruta de archivo de más de 260 caracteres en la sección de archivos del archivo appspec.yml, es posible que las implementaciones fallen y se produzca un error similar al siguiente:
No such file or directory @ dir_s_mkdir -
C:\your-long-file-path
Este error se produce porque, de forma predeterminada, Windows no permite rutas de archivos de más de 260 caracteres, como se detalla en la documentación de Microsoft
Para las versiones 1.4.0 o posteriores del agente de CodeDeploy, puede habilitar las rutas de archivo largas de dos maneras, según el proceso de instalación del agente:
Si el agente de CodeDeploy aún no se ha instalado:
-
En la máquina en la que planea instalar el agente de CodeDeploy, habilite la clave de registro de
LongPathsEnabledWindows mediante este comando:New-ItemProperty -Path "HKLM:\SYSTEM\CurrentControlSet\Control\FileSystem" -Name "LongPathsEnabled" -Value 1 -PropertyType DWORD -Force -
Instale el agente de CodeDeploy. Para obtener más información, consulte Instalación del agente de CodeDeploy.
Si el agente de CodeDeploy ya se ha instalado:
-
En la máquina del agente de CodeDeploy, habilite la clave de registro de
LongPathsEnabledWindows mediante este comando:New-ItemProperty -Path "HKLM:\SYSTEM\CurrentControlSet\Control\FileSystem" -Name "LongPathsEnabled" -Value 1 -PropertyType DWORD -Force -
Reinicie el agente de CodeDeploy para que el cambio de clave de registro tenga efecto. Para reiniciar el agente, utilice este comando:
powershell.exe -Command Restart-Service -Name codedeployagent
Los procesos de larga duración pueden producir un error en la implementación
Para las implementaciones en instancias de Amazon Linux, Ubuntu Server y RHEL, si tiene un script de implementación que inicia un proceso de larga duración, CodeDeploy puede dedicar mucho tiempo a esperar al evento de ciclo de vida de la implementación y se producirá un error en la implementación. Esto se debe a que, si el proceso se ejecuta durante más tiempo que el tiempo previsto de ejecución de los procesos en primer y segundo plano de ese evento, CodeDeploy detiene la implementación aunque el proceso siga ejecutándose según lo previsto.
Suponga, por ejemplo, que la revisión de la aplicación contiene dos archivos en su raíz, after-install.sh y sleep.sh. Su archivo AppSpec contiene las siguientes instrucciones:
version: 0.0 os: linux files: - source: ./sleep.sh destination: /tmp hooks: AfterInstall: - location: after-install.sh timeout: 60
El archivo after-install.sh se ejecuta durante el evento de ciclo de vida AfterInstall de la aplicación. Este es su contenido:
#!/bin/bash /tmp/sleep.sh
El archivo sleep.sh contiene lo siguiente, que suspende la ejecución del programa durante tres minutos (180 segundos), lo que simula un proceso de larga duración:
#!/bin/bash sleep 180
Cuando after-install.sh llame a sleep.sh, sleep.sh se iniciará y se mantendrá en ejecución durante tres minutos (180 segundos), que es dos minutos más (120 segundos) que el tiempo que CodeDeploy espera que sleep.sh (y, por relación, after-install.sh) dejen de ejecutarse. Tras el tiempo de espera de un minuto (60 segundos), CodeDeploy detiene la implementación en los eventos de ciclo de vida AfterInstall de la aplicación, aunque siga ejecutándose sleep.sh según lo previsto. Se muestra el siguiente error:
Script at specified location: after-install.sh failed to complete in 60
seconds.
No basta con añadir un signo de ampersand (&) en after-install.sh para ejecutar sleep.sh en segundo plano.
#!/bin/bash # Do not do this. /tmp/sleep.sh &
Si hace eso, la implementación se quedará en un estado pendiente hasta el período de tiempo de espera predeterminado del evento de ciclo de vida de la implementación, después de lo cual CodeDeploy detendrá la implementación en el evento de ciclo de vida AfterInstall de la aplicación como antes.
En after-install.sh, llame a sleep.sh del modo siguiente para que CodeDeploy pueda continuar después de que el proceso empiece a ejecutarse:
#!/bin/bash /tmp/sleep.sh > /dev/null 2> /dev/null < /dev/null &
En la llamada anterior, sleep.sh es el nombre del proceso que desea empezar a ejecutar en segundo plano, redirigiendo stdout, stderr y stdin a /dev/null.
Solución de problemas con un evento de ciclo de vida AllowTraffic que ha producido un error no registrado en los registros de implementación
En algunos casos, una implementación blue/green producirá un error durante el evento de ciclo de vida AllowTraffic, pero la causa del error no se indica en los registros de implementación.
Este error se debe normalmente a que las comprobaciones de estado se han configurado incorrectamente en Elastic Load Balancing para la instancia del Equilibrador de carga clásico, del Equilibrador de carga de aplicación o del Equilibrador de carga de red usada para administrar el tráfico del grupo de implementación.
Para resolver el problema, revise y corrija los errores en la configuración de la comprobación de estado del balanceador de carga.
Para equilibradores de carga clásicos, consulte Configuración de comprobaciones de estado en la Guía del usuario de los equilibradores de carga clásicos y ConfigureHealthCheck en la Referencia de la API de Elastic Load Balancing, versión 2012-06-01.
Para los equilibradores de carga de aplicación, consulte Comprobaciones de estado de los grupos de destino en la Guía del usuario de los equilibradores de carga de aplicación.
Para los equilibradores de carga de red, consulte Comprobaciones de estado de los grupos de destino en la Guía del usuario de los equilibradores de carga de red.
Solución de problemas con eventos de ciclo de vida de la implementación ApplicationStop, BeforeBlockTraffic y AfterBlockTraffic que han producido un error
Durante una implementación, el agente de CodeDeploy ejecuta los scripts especificados para ApplicationStop, BeforeBlockTraffic y AfterBlockTraffic en el archivo AppSpec de la implementación satisfactoria anterior. (Todos los demás scripts se ejecutan desde el archivo AppSpec de la implementación actual). Si alguno de estos scripts contiene un error y no se ejecuta correctamente, la implementación puede producir un error.
Los posibles motivos de estos errores son los siguientes:
-
El agente de CodeDeploy busca el archivo
en la ubicación correcta, pero la ubicación que figura en el archivodeployment-group-id_last_successful_installno existe.deployment-group-id_last_successful_installEn las instancias de Amazon Linux, Ubuntu Server y RHEL, este archivo debe existir en
/opt/codedeploy-agent/deployment-root/deployment-instructions.En las instancias de Windows Server, este archivo se debe almacenar en la carpeta
C:\ProgramData\Amazon\CodeDeploy\deployment-instructions. -
En la ubicación que se indica en el archivo
, el archivo AppSpec no es válido o los scripts no se ejecutan correctamente.deployment-group-id_last_successful_install -
El script contiene un error que no se puede corregir, por lo que nunca se ejecuta correctamente.
Utilice la consola de CodeDeploy para investigar por qué una implementación ha podido producir un error durante cualquiera de estos eventos. En la página de detalles de la implementación, elija View events (Ver eventos). En la página de detalles de la instancia, en la fila ApplicationStop, BeforeBlockTraffic o AfterBlockTraffic, elija View logs (Ver registros). O utilice la AWS CLI para llamar al comando get-deployment-instance.
Si la causa del error es un script de la última implementación correcta que no se ejecuta nunca correctamente, cree una nueva implementación y especifique que se omitan los errores de ApplicationStop, BeforeBlockTraffic y AfterBlockTraffic. Hay dos formas de hacer esto:
-
Use la consola de CodeDeploy para crear una implementación. En la página Create deployment (Crear implementación), en ApplicationStop lifecycle event failure (Error del evento del ciclo de vida ApplicationStop), elija Don't fail the deployment to an instance if this lifecycle event on the instance fails (Dar como válida la implementación en una instancia si este evento de ciclo de vida en la instancia produce un error).
-
Utilice la AWS CLI para llamar al comando create-deployment e incluya la opción
--ignore-application-stop-failures.
Cuando vuelva a implementar la revisión de la aplicación, la implementación continuará aunque algunos de estos eventos de ciclo de vida produzcan un error. Si la nueva revisión incluye scripts fijos para los eventos de ciclo de vida, puede que las implementaciones futuras se realicen correctamente si aplica esta solución.
Solución de problemas con un evento de ciclo de vida de la implementación DownloadBundle que ha producido el error "UnknownError: not opened for reading"
Si intenta implementar una revisión de la aplicación desde Amazon S3 y la implementación produce el error UnknownError: not opened
for reading durante el evento de ciclo de vida DownloadBundle de la implementación:
-
Se ha producido un error interno del servicio de Amazon S3. Implemente de nuevo la revisión de la aplicación.
-
El perfil de instancia de IAM de su instancia de Amazon S3 no tiene permisos para obtener acceso a la revisión de la aplicación en Amazon S3. Para obtener información sobre las políticas de buckets de Amazon S3, consulte Envío una revisión de CodeDeploy a Amazon S3 (solo implementaciones de EC2/en las instalaciones) y Requisitos previos para una implementación.
-
Las instancias en las que se va a realizar la implementación están asociadas a una región de AWS (por ejemplo, Oeste de EE. UU. (Oregón)), pero el bucket de Amazon S3 que contiene la revisión de la aplicación está asociado a otra región de AWS (por ejemplo, Este de EE. UU. (Norte de Virginia)). Asegúrese de que la revisión de la aplicación está en un bucket de Amazon S3 asociado a la misma región de AWS que las instancias.
En la página de detalles del evento de la implementación, en la fila Download bundle (Descargar paquete), elija View logs (Ver registros). O utilice la AWS CLI para llamar al comando get-deployment-instance. Si se produce un error, debería aparecer un error en el resultado con el código de error UnknownError y el mensaje de error not opened for reading.
Para determinar la causa de este error:
-
Habilite el registro en red en al menos una de las instancias y, a continuación, implemente de nuevo la revisión de la aplicación.
-
Examine el archivo de registro en red para encontrar el error. Los mensajes de error comunes para este problema incluyen la frase "access denied".
-
Después de examinar los archivos de registro, le recomendamos que deshabilite el registro en red para reducir el tamaño de los archivos de registro y la cantidad de información confidencial que puede aparecer en la salida en texto sin formato en la instancia en el futuro.
Para obtener información sobre cómo encontrar el archivo de registro en red y habilitar y deshabilitar el registro en red, consulte :log_aws_wire: en Referencia de configuración del agente de CodeDeploy.
Solución de problemas cuando se omiten todos los eventos del ciclo de vida
Si todos los eventos del ciclo de vida de una implementación de EC2 o en las instalaciones se omiten, es posible que reciba un error similar a The overall deployment failed because too many
individual instances failed deployment, too few healthy instances are available for
deployment, or some instances in your deployment group are experiencing problems. (Error
code: HEALTH_CONSTRAINTS). Estas son algunas posibles causas y soluciones:
-
El agente de CodeDeploy podría no estar instalado o en ejecución en la instancia. Para determinar si el agente de CodeDeploy se está ejecutando:
-
Para un servidor de Amazon Linux RHEL o Ubuntu, ejecute lo siguiente:
systemctl status codedeploy-agent -
Para Windows, ejecute lo siguiente:
powershell.exe -Command Get-Service -Name CodeDeployagent
Si el agente de CodeDeploy no está instalado o en ejecución, consulte Comprobación de que el agente de CodeDeploy se está ejecutando.
Es posible que la instancia no pueda conectar con el punto de conexión de CodeDeploy o Amazon S3 público a través del puerto 443. Pruebe con una de las siguientes acciones:
-
Asigne una dirección IP pública a la instancia y utilice su tabla de ruteo para permitir el acceso a Internet. Asegúrese de que el grupo de seguridad asociado con la instancia permite el acceso de salida a través del puerto 443 (HTTPS). Para obtener más información, consulte Protocolo y puerto de comunicación para el agente de CodeDeploy.
-
Si una instancia se aprovisiona en una subred privada, utilice una gateway NAT en lugar de una gateway de Internet en la tabla de ruteo. Para obtener más información, consulte Puerta de enlace NAT.
-
-
El rol de servicio de CodeDeploy podría no tener los permisos necesarios. Para configurar un rol de servicio de CodeDeploy, consulte Paso 2: Crear un rol de servicio para CodeDeploy.
-
Si utiliza un proxy HTTP, asegúrese de que está especificado en el valor de
:proxy_uri:en el archivo de configuración del agente de CodeDeploy. Para obtener más información, consulte Referencia de configuración del agente de CodeDeploy. -
Es posible que la firma de fecha y hora de la firma de su instancia de implementación no coincida con la firma de fecha y hora de la solicitud de implementación. Busque un error similar a
Cannot reach InstanceService: Aws::CodeDeployCommand::Errors::InvalidSignatureException - Signature expireden el archivo de registro del agente de CodeDeploy. Si ve este error, siga los pasos que se indican en Solución de errores de implementación “InvalidSignatureException – Signature expired: [hora] is now earlier than [hora]”. Para obtener más información, consulte Visualización de los datos de registro de las implementaciones de EC2/en las instalaciones de CodeDeploy. -
Puede que el agente de CodeDeploy haya detenido la ejecución porque una instancia se está quedando sin memoria o espacio en el disco duro. Intente reducir el número de implementaciones archivadas en la instancia actualizando el valor de
max_revisionsen la configuración del agente de CodeDeploy. Si hace esto para una instancia de EC2 y el problema continúa, considere la posibilidad de utilizar una instancia más grande. Por ejemplo, si el tipo de instancia est2.small, intente usar unat2.medium. Para obtener más información, consulte Archivos instalados por el agente de CodeDeploy , Referencia de configuración del agente de CodeDeploy y Tipos de instancias. -
Es posible que la instancia que va a implementar no tenga un perfil de instancia de IAM asociado o que tenga un perfil de instancia de IAM asociado que no tenga los permisos necesarios.
-
Si un perfil de instancia de IAM no está asociado a la instancia, cree uno con los permisos necesarios y, a continuación, asócielo a la instancia.
-
Si un perfil de instancia de IAM ya está asociado a la instancia, asegúrese de que dispone de los permisos necesarios.
Después de confirmar que el perfil de instancia asociado está configurado con los permisos necesarios, reinicie la instancia. Para obtener más información, consulte Paso 4: Crear un perfil de instancia de IAM para las instancias de Amazon EC2 y Roles de IAM para Amazon EC2 en la Guía del usuario de Amazon EC2.
-
El script de Windows PowerShell no puede usar la versión de 64 bits de Windows PowerShell de forma predeterminada
Si un script de Windows PowerShell que se ejecuta como parte de una implementación depende de la funcionalidad de 64 bits (por ejemplo, porque consume más memoria que la que permite una aplicación de 32 bits o porque llama a bibliotecas que solo se ofrecen en una versión de 64 bits), puede que el script se bloquee o que no se ejecute según lo previsto. Esto se debe a que, de forma predeterminada, CodeDeploy utiliza la versión de 32 bits de Windows PowerShell para ejecutar scripts de Windows PowerShell que forman parte de una revisión de la aplicación.
Añada código como el siguiente al comienzo de cualquier script que tenga que ejecutar con la versión de 64 bits de Windows PowerShell:
# Are you running in 32-bit mode? # (\SysWOW64\ = 32-bit mode) if ($PSHOME -like "*SysWOW64*") { Write-Warning "Restarting this script under 64-bit Windows PowerShell." # Restart this script under 64-bit Windows PowerShell. # (\SysNative\ redirects to \System32\ for 64-bit mode) & (Join-Path ($PSHOME -replace "SysWOW64", "SysNative") powershell.exe) -File ` (Join-Path $PSScriptRoot $MyInvocation.MyCommand) @args # Exit 32-bit script. Exit $LastExitCode } # Was restart successful? Write-Warning "Hello from $PSHOME" Write-Warning " (\SysWOW64\ = 32-bit mode, \System32\ = 64-bit mode)" Write-Warning "Original arguments (if any): $args" # Your 64-bit script code follows here... # ...
Aunque la información de ruta del archivo de este código pueda parecer contradictoria, la versión de 32 bits de Windows PowerShell utiliza una ruta como la siguiente:
c:\Windows\SysWOW64\WindowsPowerShell\v1.0\powershell.exe
La versión de 64 bits de Windows PowerShell utiliza una ruta como la siguiente:
c:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe