Risolvi i problemi relativi alla distribuzione di EC2/on-premise - AWS CodeDeploy

Le traduzioni sono generate tramite traduzione automatica. In caso di conflitto tra il contenuto di una traduzione e la versione originale in Inglese, quest'ultima prevarrà.

Risolvi i problemi relativi alla distribuzione di EC2/on-premise

Nota

Le cause di molti guasti di distribuzione possono essere identificate rivedendo i file di log creati durante il processo di distribuzione. Per semplicità, consigliamo di utilizzare Amazon CloudWatch Logs per monitorare centralmente i file di registro anziché visualizzarli istanza per istanza. Per informazioni, consulta View CodeDeploy Logs in CloudWatch Logs Console.

Suggerimento

Per un runbook che automatizza molte attività di risoluzione dei problemi relative alle distribuzioni EC2/on-premise, vedi - nel riferimento al runbook di riferimento di TroubleshootCodeDeploy Systems Manager AWSSupportAutomation.AWS

CodeDeploy errore relativo alle credenziali mancanti del plugin CommandPoller

Se si verifica un errore simile a InstanceAgent::Plugins::CodeDeployPlugin::CommandPoller: Missing credentials - please check if this instance was started with an IAM instance profile, il motivo potrebbe essere uno dei seguenti:

  • L'istanza su cui stai eseguendo la distribuzione non ha un profilo di istanza IAM associato.

  • Il profilo dell'istanza IAM non dispone delle autorizzazioni corrette configurate.

Un profilo di istanza IAM concede all' CodeDeploy agente l'autorizzazione a comunicare CodeDeploy e scaricare la revisione da Amazon S3. Per le istanze EC2, consulta Gestione delle identità e degli accessi per l' AWS CodeDeploy. Per le istanze locali, consulta Working with On-Premises Instances.

La distribuzione ha esito negativo e viene mostrato il messaggio "Convalida del messaggio con firma PKCS7 non riuscita"

Questo messaggio di errore indica che l'istanza sta eseguendo una versione dell' CodeDeploy agente che supporta solo l'algoritmo hash SHA-1. Il supporto per l'algoritmo hash SHA-2 è stato introdotto nella versione 1.0.1.854 dell'agente, rilasciata a novembre 2015. CodeDeploy A partire dal 17 ottobre 2016, le distribuzioni non riescono se viene installata una versione dell'agente precedente alla 1.0.1.854. CodeDeploy Per ulteriori informazioni, consulta per passare AWS all'algoritmo di hash SHA256 per i certificati SSL, NOTA: Ritiro degli agenti host precedenti alla versione 1.0.1.85 e. CodeDeploy Aggiorna l'agente CodeDeploy

La distribuzione o la ridistribuzione degli stessi file alle stesse posizioni delle istanze avrà esito negativo e mostrerà l'errore "La distribuzione non è riuscita a causa di un file specificato già esistente in questa posizione"

Quando si CodeDeploy tenta di distribuire un file su un'istanza ma un file con lo stesso nome esiste già nella posizione di destinazione specificata, la distribuzione su quell'istanza potrebbe non riuscire. Potresti ricevere il messaggio di errore "La distribuzione non è riuscita a causa di un file specificato già esistente in questa posizione: location-name". Questo perché, durante ogni distribuzione, elimina CodeDeploy innanzitutto tutti i file della distribuzione precedente, elencati in un file di registro di pulizia. Se nelle cartelle di installazione di destinazione sono presenti file che non sono elencati in questo file di pulizia, l' CodeDeploy agente per impostazione predefinita lo interpreta come un errore e non riesce a eseguire la distribuzione.

Nota

Nelle istanze di Amazon Linux, RHEL e Ubuntu Server, il file di pulizia si trova in. /opt/codedeploy-agent/deployment-root/deployment-instructions/ Nelle istanze di Windows Server, la posizione è. C:\ProgramData\Amazon\CodeDeploy\deployment-instructions\

Il modo più semplice per evitare questo errore è specificare un'opzione diversa dal comportamento predefinito per l'esito negativo della distribuzione. Per ciascuna distribuzione, è possibile scegliere se far sì che la distribuzione abbia esito negativo, sovrascrivere i file non inclusi nel file di pulizia o conservare i file già presenti nell'istanza.

L'opzione di sovrascrittura è utile, ad esempio, se collochi manualmente un file in un'istanza dopo l'ultima distribuzione e poi aggiungi un file con lo stesso nome nella successiva revisione dell'applicazione.

Potresti scegliere l'opzione di conservazione per i file nell'istanza che desideri inserire nella successiva distribuzione senza doverli aggiungere al pacchetto della revisione dell'applicazione. L'opzione retention è utile anche se i file dell'applicazione si trovano già nell'ambiente di produzione e si desidera distribuirli utilizzando CodeDeploy per la prima volta. Per ulteriori informazioni, consulta Crea una distribuzione della piattaforma di elaborazione EC2/on-premise (console) e Comportamento di rollback con il contenuto esistente.

Risolvere i problemi di distribuzione The deployment failed because a specified file already exists at this location

Se scegliete di non specificare un'opzione per sovrascrivere o conservare il contenuto CodeDeploy rilevato nelle ubicazioni di distribuzione di destinazione (o se non specificate alcuna opzione di distribuzione per la gestione del contenuto esistente in un comando programmatico), potete scegliere di risolvere l'errore.

Le informazioni seguenti si applicano solo se scegli di non conservare o sovrascrivere i contenuti.

Se si tenta di ridistribuire file con gli stessi nomi e posizioni, è più probabile che la ridistribuzione abbia successo se si specifica il nome dell'applicazione e il gruppo di distribuzione con lo stesso ID del gruppo di distribuzione sottostante utilizzato in precedenza. CodeDeploy utilizza l'ID del gruppo di distribuzione sottostante per identificare i file da rimuovere prima di una ridistribuzione.

La distribuzione di nuovi file o la ridistribuzione degli stessi file nelle stesse posizioni sulle istanze può avere esito negativo per questi motivi:

  • Hai specificato un nome dell'applicazione diverso per una ridistribuzione della stessa revisione alle stesse istanze. La ridistribuzione ha esito negativo perché, anche se il nome del gruppo di distribuzione è lo stesso, l'uso di un nome dell'applicazione diverso comporta l'utilizzo di un ID gruppo di distribuzione sottostante differente.

  • Hai eliminato e ricreato un gruppo di distribuzione per un'applicazione e poi hai tentato di ridistribuire la stessa revisione al gruppo di distribuzione. La ridistribuzione non riesce perché, anche se il nome del gruppo di distribuzione è lo stesso, CodeDeploy fa riferimento a un ID del gruppo di distribuzione sottostante diverso.

  • Hai eliminato un'applicazione e un gruppo di distribuzione in CodeDeploy, quindi hai creato una nuova applicazione e un gruppo di distribuzione con gli stessi nomi di quelli eliminati. Dopodiché hai tentato di ridistribuire al nuovo gruppo di distribuzione una revisione che era stata distribuita al gruppo di distribuzione precedente con lo stesso nome. La ridistribuzione non riesce perché, anche se i nomi dell'applicazione e del gruppo di distribuzione sono gli stessi, fa CodeDeploy comunque riferimento all'ID del gruppo di distribuzione eliminato.

  • Hai distribuito una revisione a un gruppo di distribuzione e poi hai distribuito la stessa revisione a un altro gruppo di distribuzione per le stesse istanze. La seconda distribuzione non riesce perché CodeDeploy fa riferimento a un ID del gruppo di distribuzione sottostante diverso.

  • Hai distribuito una revisione a un gruppo di distribuzione e poi hai distribuito un'altra revisione a un altro gruppo di distribuzione per le stesse istanze. Vi è almeno un file con lo stesso nome e nella stessa posizione che il secondo gruppo di distribuzione cerca di distribuire. La seconda distribuzione non riesce perché CodeDeploy non rimuove il file esistente prima dell'inizio della seconda distribuzione. Entrambe le distribuzioni fanno riferimento a ID gruppo di distribuzione differenti.

  • È stata distribuita una revisione in CodeDeploy, ma esiste almeno un file con lo stesso nome e nella stessa posizione. La distribuzione non riesce perché, per impostazione predefinita, CodeDeploy non rimuove il file esistente prima dell'inizio della distribuzione.

Per risolvere queste situazioni, procedi in uno dei seguenti modi:

  • Rimuovi i file dalle posizioni e dalle istanze in cui erano stati distribuiti in precedenza e prova a eseguire nuovamente la distribuzione.

  • Nel AppSpec file della revisione, negli eventi del ciclo di vita della BeforeInstall distribuzione ApplicationStop o della distribuzione, specifica uno script personalizzato per eliminare i file in tutte le posizioni che corrispondono ai file che la revisione sta per installare.

  • Distribuisci o ridistribuisci i file a posizioni o istanze che non erano parte di distribuzioni precedenti.

  • Prima di eliminare un'applicazione o un gruppo di distribuzione, distribuite una revisione che contenga un AppSpec file che specifichi l'assenza di file da copiare nelle istanze. Per la distribuzione, specifica il nome dell'applicazione e il nome del gruppo di distribuzione che utilizzano gli stessi ID dell'applicazione e del gruppo di distribuzione sottostanti che stai per eliminare. (È possibile utilizzare il get-deployment-groupcomando per recuperare l'ID del gruppo di distribuzione.) CodeDeployutilizza l'ID e il AppSpec file del gruppo di distribuzione sottostanti per rimuovere tutti i file installati nella precedente distribuzione riuscita.

I percorsi di file lunghi causano errori del tipo «Nessun file o directory di questo tipo»

Per le distribuzioni su istanze di Windows, se nella sezione file del file appspec.yml è presente un percorso di oltre 260 caratteri, è possibile che le distribuzioni non riescano con un errore simile al seguente:

No such file or directory @ dir_s_mkdir - C:\your-long-file-path

Questo errore si verifica perché Windows per impostazione predefinita non consente percorsi di file superiori a 260 caratteri, come dettagliato nella documentazione Microsoft.

Per le versioni CodeDeploy dell'agente 1.4.0 o successive, è possibile abilitare i percorsi di file lunghi in due modi, a seconda del processo di installazione dell'agente:

Se l' CodeDeploy agente non è ancora stato installato:

  1. Sul computer in cui intendi installare l' CodeDeploy agente, abilita la chiave di registro di LongPathsEnabled Windows utilizzando questo comando:

    New-ItemProperty -Path "HKLM:\SYSTEM\CurrentControlSet\Control\FileSystem" -Name "LongPathsEnabled" -Value 1 -PropertyType DWORD -Force
  2. Installa l' CodeDeploy agente. Per ulteriori informazioni, consulta Installa l' CodeDeploy agente.

Se l' CodeDeploy agente è già stato installato:

  1. Sul computer dell' CodeDeploy agente, abilita la chiave di registro di LongPathsEnabled Windows utilizzando questo comando:

    New-ItemProperty -Path "HKLM:\SYSTEM\CurrentControlSet\Control\FileSystem" -Name "LongPathsEnabled" -Value 1 -PropertyType DWORD -Force
  2. Riavviare l' CodeDeploy agente per rendere effettiva la modifica della chiave di registro. Per riavviare l'agente, utilizzate questo comando:

    powershell.exe -Command Restart-Service -Name codedeployagent

I processi di lunga durata possono compromettere la riuscita delle distribuzioni

Per le distribuzioni su istanze Amazon Linux, Ubuntu Server e RHEL, se disponi di uno script di distribuzione che avvia un processo di lunga durata, CodeDeploy potresti attendere a lungo l'evento del ciclo di vita della distribuzione e poi fallire la distribuzione. Questo perché se il processo dura più a lungo di quello previsto per i processi in primo piano e in background in quell'evento, CodeDeploy interrompe e fallisce la distribuzione, anche se il processo è ancora in esecuzione come previsto.

Ad esempio, una revisione dell'applicazione contiene due file nella propria radice, after-install.sh e sleep.sh. Il AppSpec file contiene le seguenti istruzioni:

version: 0.0 os: linux files: - source: ./sleep.sh destination: /tmp hooks: AfterInstall: - location: after-install.sh timeout: 60

Il after-install.sh file viene eseguito durante l'evento del ciclo di vita AfterInstall dell'applicazione. Di seguito sono descritti i contenuti:

#!/bin/bash /tmp/sleep.sh

Il file sleep.sh include il contenuto seguente, che sospende l'esecuzione del programma per tre minuti (180 secondi), simulando un processo di lunga durata:

#!/bin/bash sleep 180

In caso di after-install.sh chiamatasleep.sh, viene sleep.sh avviato ed eseguito per tre minuti (180 secondi), ovvero due minuti (120 secondi) dopo l'orario CodeDeploy previsto sleep.sh (e, per relazione,after-install.sh) l'interruzione dell'esecuzione. Dopo il timeout di un minuto (60 secondi), CodeDeploy interrompe e fallisce la distribuzione all'evento del ciclo di vita AfterInstall dell'applicazione, anche se sleep.sh continua a funzionare come previsto. Viene visualizzato l'errore seguente:

Script at specified location: after-install.sh failed to complete in 60 seconds.

Non è sufficiente aggiungere una e commerciale (&) in after-install.sh per eseguire sleep.sh in background.

#!/bin/bash # Do not do this. /tmp/sleep.sh &

In questo modo è possibile lasciare la distribuzione in sospeso fino al periodo di timeout predefinito di un'ora per l'evento del ciclo di vita dell'implementazione, dopodiché CodeDeploy interrompe e fallisce la distribuzione in occasione dell'evento del ciclo di vita dell'applicazione come in precedenza. AfterInstall

Inafter-install.sh, chiama sleep.sh come segue, il che consente CodeDeploy di continuare dopo l'avvio del processo:

#!/bin/bash /tmp/sleep.sh > /dev/null 2> /dev/null < /dev/null &

Nella chiamata precedente sleep.sh è il nome del processo la cui esecuzione deve essere avviata in background, con il reindirizzamento di stdout, stderr e stdin a /dev/null.

Risoluzione dei problemi relativi a un evento AllowTraffic del ciclo di vita non riuscito senza che sia stato riportato alcun errore nei log di distribuzione

In alcuni casi, una distribuzione blu/verde non riesce durante l'evento del AllowTraffic ciclo di vita, ma i registri di distribuzione non indicano la causa dell'errore.

Questo errore è in genere dovuto a controlli di integrità configurati in modo errato in Elastic Load Balancing for the Classic Load Balancer, Application Load Balancer o Network Load Balancer utilizzati per gestire il traffico per il gruppo di distribuzione.

Per risolvere il problema, esamina e correggi eventuali errori nella configurazione del controllo dello stato per il sistema di bilanciamento del carico.

Per i Classic Load Balancer, consulta Configure Health Checks nella User Guide for Classic Load Balancers e ConfigureHealthChecknella versione di riferimento dell'API Elastic Load Balancing 2012-06-01.

Per gli Application Load Balancer, consulta Health Checks for Your Target Groups nella User Guide for Application Load Balancers.

Per i Network Load Balancer, consulta Health Checks for Your Target Groups nella Network Load Balancer User Guide.

Risoluzione dei problemi relativi a un evento non riuscito o ApplicationStop AfterBlockTraffic relativo al BeforeBlockTraffic ciclo di vita dell'implementazione

Durante una distribuzione, l' CodeDeploy agente esegue gli script specificati per ApplicationStop e BeforeBlockTraffic contenuti AfterBlockTraffic nel AppSpec file della precedente distribuzione riuscita. (Tutti gli altri script vengono eseguiti dal AppSpec file nella distribuzione corrente.) Se uno di questi script contiene un errore e non viene eseguito correttamente, è possibile che la distribuzione non riesca.

Le possibili cause di questa situazione includono:

  • L' CodeDeploy agente trova il deployment-group-id_last_successful_install file nella posizione corretta, ma la posizione elencata nel deployment-group-id_last_successful_install file non esiste.

    Nelle istanze Amazon Linux, Ubuntu Server e RHEL, questo file deve esistere in. /opt/codedeploy-agent/deployment-root/deployment-instructions

    Nelle istanze di Windows Server, questo file deve essere archiviato nella cartella. C:\ProgramData\Amazon\CodeDeploy\deployment-instructions

  • Nella posizione elencata nel deployment-group-id_last_successful_install file, il AppSpec file non è valido o gli script non vengono eseguiti correttamente.

  • Lo script contiene un errore che non può essere corretto, pertanto non verrà mai eseguito correttamente.

Usa la CodeDeploy console per indagare sul motivo per cui una distribuzione potrebbe non essere riuscita durante uno di questi eventi. Nella pagina dei dettagli per la distribuzione scegliere View events (Visualizza eventi). Nella pagina dei dettagli dell'istanza, nella AfterBlockTrafficriga ApplicationStopBeforeBlockTraffic, o, scegli Visualizza registri. Oppure usa AWS CLI per chiamare il get-deployment-instancecomando.

Se la causa dell'errore è uno script dell'ultima distribuzione riuscita che non viene mai eseguito correttamente, crea una distribuzione e specifica che gli AfterBlockTraffic errori ApplicationStop BeforeBlockTraffic, e devono essere ignorati. Ci sono due modi per effettuare questa operazione:

  • Usa la CodeDeploy console per creare una distribuzione. Nella pagina Crea distribuzione, in Errore dell'evento ApplicationStop del ciclo di vita, scegli Non interrompere la distribuzione su un'istanza se questo evento del ciclo di vita sull'istanza fallisce.

  • Usa il AWS CLI per chiamare il create-deployment comando e includi l'opzione. --ignore-application-stop-failures

Quando si distribuisce nuovamente la revisione dell'applicazione, la distribuzione continua anche se uno di questi tre eventi del ciclo di vita non va a buon fine. Se la nuova revisione include script fissi per quegli eventi del ciclo di vita, è possibile che le distribuzioni future riescano senza applicare questa correzione.

Risoluzione dei problemi relativi a un evento del ciclo di vita di DownloadBundle distribuzione non riuscito con UnknownError: not open-for reading

Se stai tentando di distribuire una revisione dell'applicazione da Amazon S3 e la distribuzione non riesce durante l'evento del ciclo di vita DownloadBundle della distribuzione con l'errore: UnknownError: not opened for reading

  • Si è verificato un errore interno del servizio Amazon S3. Distribuisci nuovamente la revisione dell'applicazione.

  • Il profilo dell'istanza IAM sulla tua istanza EC2 non dispone delle autorizzazioni per accedere alla revisione dell'applicazione in Amazon S3. Per informazioni sulle policy dei bucket di Amazon S3, consulta e. Invia una revisione CodeDeploy ad Amazon S3 (solo distribuzioni EC2/on-premise) Prerequisiti di distribuzione

  • Le istanze in cui esegui la distribuzione sono associate a una AWS regione (ad esempio, Stati Uniti occidentali (Oregon)), ma il bucket Amazon S3 che contiene la revisione dell'applicazione è associato a un'altra AWS regione (ad esempio, Stati Uniti orientali (Virginia settentrionale)). Assicurati che la revisione dell'applicazione si trovi in un bucket Amazon S3 associato alla AWS stessa regione delle istanze.

Nella pagina dei dettagli degli eventi per la distribuzione, nella riga Download bundle (Scarica bundle), scegliere View logs (Visualizza log). Oppure usa per chiamare il comando AWS CLI . get-deployment-instance Se si verifica, l'errore deve essere indicato nell'output con il codice di errore UnknownError e il messaggio di errore not opened for reading.

Per stabilire il motivo di questo errore:

  1. Abilitare la registrazione in rete su almeno una delle istanze, quindi distribuire nuovamente la revisione dell'applicazione.

  2. Esaminare il file di registrazione in rete per trovare l'errore. I messaggi di errore più comuni per questo problema includono la frase "access denied" (accesso negato).

  3. Dopo avere esaminato i file di log, è consigliabile disabilitare la registrazione in rete per ridurre la dimensione del file di log e la quantità di informazioni sensibili che in futuro potrebbero comparire nell'output in testo normale nell'istanza.

Per informazioni su come trovare il file di registrazione dei cavi e abilitare e disabilitare il cablaggio, vedere :log_aws_wire: nella guida di riferimento alla configurazione CodeDeploy dell'agente.

Risoluzione dei problemi relativi a tutti gli eventi del ciclo di vita ignorati

Se tutti gli eventi del ciclo di vita di una distribuzione EC2 o locale vengono ignorati, potresti ricevere un errore simile 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) Di seguito sono elencate alcune possibili cause e soluzioni:

  • L' CodeDeploy agente potrebbe non essere installato o in esecuzione sull'istanza. Per determinare se l' CodeDeploy agente è in esecuzione:

    • Per il server Amazon Linux RHEL o Ubuntu, esegui:

      systemctl status codedeploy-agent
    • Per Windows, esegui:

      powershell.exe -Command Get-Service -Name CodeDeployagent

    Se l' CodeDeploy agente non è installato o non è in esecuzione, vedereVerifica che l' CodeDeploy agente sia in esecuzione.

    L'istanza potrebbe non essere in grado di raggiungere l'endpoint pubblico CodeDeploy o Amazon S3 utilizzando la porta 443. Provare con una delle seguenti operazioni:

    • Assegna un indirizzo IP pubblico all'istanza e utilizza la tabella di routing per consentire l'accesso a Internet. Verifica che il gruppo di sicurezza associato all'istanza consenta l'accesso in uscita sulla porta 443 (HTTPS). Per ulteriori informazioni, consulta Protocollo di comunicazione e porta per l'agente CodeDeploy .

    • Se un'istanza viene assegnata in una sottorete privata, utilizza un gateway NAT anziché un gateway Internet nella tabella di routing. Per ulteriori informazioni, consulta Gateway NAT.

  • Il ruolo di servizio per CodeDeploy potrebbe non avere le autorizzazioni richieste. Per configurare un ruolo del servizio CodeDeploy, consulta Fase 2: Creare un ruolo di servizio per CodeDeploy.

  • Se utilizzate un proxy HTTP, assicuratevi che sia specificato nell':proxy_uri:impostazione del file di configurazione dell' CodeDeploy agente. Per ulteriori informazioni, consulta CodeDeploy riferimento alla configurazione dell'agente.

  • La data e l'ora dell'istanza di distribuzione potrebbero non corrispondere alla data e all'ora della richiesta di distribuzione. Cerca un errore simile a quello presente Cannot reach InstanceService: Aws::CodeDeployCommand::Errors::InvalidSignatureException - Signature expired nel file di registro CodeDeploy dell'agente. Se l'errore è presente, segui i passaggi descritti in Risoluzione degli errori di distribuzione «InvalidSignatureException — Firma scaduta: [ora] è precedente a [ora]». Per ulteriori informazioni, consulta Visualizzazione dei dati di registro per le distribuzioni CodeDeploy EC2/on-premise.

  • L' CodeDeploy agente potrebbe smettere di funzionare perché un'istanza sta esaurendo la memoria o lo spazio su disco rigido. Prova a ridurre il numero di distribuzioni archiviate sulla tua istanza aggiornando l'max_revisionsimpostazione nella configurazione dell'agente. CodeDeploy Se esegui questa operazione per un'istanza EC2 e il problema persiste, prendi in considerazione l'utilizzo di un'istanza più grande. Ad esempio, se il tipo di istanza è t2.small, prova a usare un'stanza t2.medium. Per ulteriori informazioni, consulta File installati dall'agente CodeDeploy CodeDeploy riferimento alla configurazione dell'agente, e Tipi di istanze.

  • L'istanza su cui stai eseguendo la distribuzione potrebbe non avere un profilo di istanza IAM collegato o potrebbe avere un profilo di istanza IAM collegato che non dispone delle autorizzazioni richieste.

    • Se un profilo di istanza IAM non è collegato alla tua istanza, creane uno con le autorizzazioni richieste e poi collegalo.

    • Se un profilo di istanza IAM è già collegato alla tua istanza, assicurati che disponga delle autorizzazioni richieste.

    Dopo aver verificato che il profilo di istanza collegato è configurato con le autorizzazioni richieste, riavvia l'istanza. Per ulteriori informazioni, consulta Fase 4: crea un profilo di istanza IAM per le tue istanze Amazon EC2 IAM Roles for Amazon EC2 nella Amazon EC2 User Guide.

Per impostazione predefinita, PowerShell gli script di Windows non riescono a utilizzare la versione a 64 bit di Windows PowerShell

Se uno PowerShell script di Windows eseguito come parte di una distribuzione si basa sulla funzionalità a 64 bit (ad esempio, perché consuma più memoria di quella consentita da un'applicazione a 32 bit o chiama librerie offerte solo in una versione a 64 bit), lo script potrebbe bloccarsi o non essere eseguito come previsto. Questo perché, per impostazione predefinita, CodeDeploy utilizza la versione a 32 bit di Windows PowerShell per eseguire PowerShell script Windows che fanno parte della revisione di un'applicazione.

Aggiungi codice come il seguente all'inizio di qualsiasi script che deve essere eseguito con la versione a 64 bit di 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... # ...

Sebbene le informazioni sul percorso dei file contenute in questo codice possano sembrare controintuitive, Windows a 32 bit PowerShell utilizza un percorso come:

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

Windows a 64 bit PowerShell utilizza un percorso come:

c:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe