2012-02-06 14 views
13

Ecco la mia configurazione: enter image description hereNon è possibile ottenere Basic Script PowerShell in esecuzione all'interno della squadra Città

Sul log di compilazione, vedo solo l'uscita dei primi due righe, e poi "Processo terminato con il codice 0" l'ultimo risultato di questo passo di costruzione.

Ho tentato di aprire un terminale nel server di generazione nell'account SYSTEM (utilizzando PsTools), poiché Team City è configurato per l'esecuzione in base a detto account. Poi, ho creato un file Test.ps1 con lo stesso contenuto e corse un comando proprio come squadra Città di:

[Step 1/4] Starting: C:\Windows\system32\cmd.exe /c C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe -NonInteractive -Command - <C:\TeamCity\buildAgent\temp\buildTmp\powershell5129275380148486045.ps1 && exit /b %ERRORLEVEL% 

(tranne che per il percorso del file ps1 e la parte iniziale cmd.exe, ovviamente) . Ho visto l'uscita delle prime due linee, e poi il terminale è scomparso all'improvviso!

Dove ho fatto casini? A proposito, sono nuovo di Powershell.

+0

Hai impostato la politica di esecuzione per consentire il tuo script? – ccellar

+1

Ho scelto "Metti lo script in Powershell stdin con gli argomenti -Command" per evitarlo. Inoltre, se è possibile eseguire le prime due righe, penserei che le autorizzazioni siano OK, o ho bisogno di ulteriori permessi per eseguire la logica condizionale? Sarebbe abbastanza pazzo: P –

+1

Non ho contesto per questo strumento, ma mi chiedo se sta avendo problemi con lo stdin multilinea? Prova a sostituire il condizionale con il seguente (one-liner) per vedere se ottieni risultati diversi: if ("1" -eq "1") {write-host "test"} else {write-host "else test"} –

risposta

18

L'opzione di comando stdin di Powershell ha qualche stranezza attorno ai comandi multilinea come quello.

È scritto nella forma seguente avrebbe funzionato:

write-host "test" 
write-host "test2" 
if("1" -eq "1"){write-host "test3 in if"} else {write-host "test4 in else"} 

Il modo ideale sarebbe quella di utilizzare l'opzione Script : File in TeamCity che verrà eseguito lo script specificato utilizzando il parametro -File a PowerShell.

Se non si desidera disporre di un file e di avere VCS, nella configurazione corrente, modificare Script Execution Mode in Execute .ps1 file with -File argument.

+0

Hai ragione, se le clausole 'if-else' sono one-liner, funziona. Mi chiedo se questo accade anche con Powershell 2.0?Comunque, dato che la leggibilità del codice è prioritaria, ho deciso di seguire il tuo secondo suggerimento (che implicava l'apertura di un terminale sotto l'account SYSTEM e l'esecuzione dei seguenti comandi: 1) 'powershell' 2)' Set-ExecutionPolicy RemoteSigned' 3) 'exit') –

+2

@dario_ramos - Cens di Happens upto powershell 3.0 :) – manojlds

+0

Nota che puoi usare ";" separare più istruzioni su una singola riga. – Dunc

1

Si potrebbe provare a mettere il tutore aprendo il blocco sulla stessa linea del Se.

cioè

If ('1' -eq '1') { 
    ... 
} 
Else { 
    ... 
} 

Questo è il solito stile che vedi con PowerShell, e, ovviamente, mettere le parentesi graffe sulla riga successiva può causare problemi.

3

Ho riscontrato questo problema con gli script di Powerhell in linea con TeamCity (fino alla versione corrente di 7.1.3). Ho trovato il problema di essere il carattere di tabulazione piuttosto che le istruzioni su più righe. Prova a sostituire i caratteri di tabulazione con spazi (rimanendo ancora su più righe) e lo script dovrebbe funzionare correttamente.

+0

Perfetto aveva lo stesso identico problema. Schede di odio :) –

+0

Idem con il problema della scheda. Fa appendere il passaggio –

Problemi correlati