Domanda

Integrazione continua

Ho lavorato su uno script di PowerShell per semplificare il nostro processo di sviluppo. Stavo programmando di gestirlo come evento post-build, ma ho qualche problema.

Dal prompt di PowerShell, funziona perfettamente:

PS C:\> ./example.ps1

Tuttavia, quando si tenta di eseguirlo da cmd.exe come segue:

C:\> powershell -command "&\"C:\path to script\example.ps1\""

Lo script viene eseguito ma ricevo una serie di errori da PowerShell, che consiste principalmente in errori di risoluzione del percorso dalla funzione resolve-path:

  

Percorso di risoluzione: Impossibile trovare il percorso 'C: \ Documents and Settings \ bdunbar \ My Documents   \ Visual Studio 2008 \ Projects \ CgmFamilyComm \ FamilyComm \ iirf \ cms \ isapirewrite4.dl   perché non esiste.   In C: \ Documents and Settings \ bdunbar \ My Documents \ Visual Studio 2008 \ Projects \ C   gmFamilyComm \ scripts \ cms.ps1: 4 char: 27   + $ iirfpath = (percorso di risoluzione < < < < ../iirf/cms/isapirewrite4.dll).path,

     

Percorso di risoluzione: Impossibile trovare il percorso 'C: \ Documents and Settings \ bdunbar \ My Documents   \ Visual Studio 2008 \ Projects \ CgmFamilyComm \ FamilyComm \ familycomm 'perché lo fanno   non esiste.   In C: \ Documents and Settings \ bdunbar \ My Documents \ Visual Studio 2008 \ Projects \ C   gmFamilyComm \ scripts \ cms.ps1: 5 char: 27   + $ vdirpath = (resol-path < < < < ../familycomm).path

C'è un modo per aggirare questo? Potrebbe essere un problema con l'esecuzione di <=> in <=>?

[Aggiornamento]

Sono stato in grado di cambiare le cose per aggirare gli errori che si verificano, ma ricevo ancora errori che funzionano perfettamente dal prompt dei comandi di PowerShell. Non riesco a capire quale sia la differenza.

È stato utile?

Soluzione

Ho fatto questo lavoro in passato (vedi http: // sharepointpdficon.codeplex.com/SourceControl/changeset/view/13092#300544 se interessati):

  

C: \ WINDOWS \ system32 \ windowspowershell \ v1.0 \ powershell.exe -NoLogo   -NonInteractive -Command. '$ (ProjectDir) Deployment \ PostBuildScript.ps1'   -ProjectDir: '$ (ProjectDir)' -ConfigurationName: '$ (ConfigurationName)' -TargetDir: '$ (TargetDir)' -TargetFileName: '$ (TargetFileName)' -TargetName: '$ (TargetName)

Quindi lancia questi parametri nella prima riga dello script post-build (se pensi di essere in grado di usarli):

param($ProjectDir, $ConfigurationName, $TargetDir, $TargetFileName)

Inoltre dovrei sottolineare che non lo sto usando attualmente. Mi è piaciuto usarlo come un rapido scratchpad per ricaricare i dati dei test per l'esecuzione dei test di integrazione.

Altri suggerimenti

Sembra che il tuo problema sia come vengono risolti i percorsi relativi. I percorsi relativi vengono risolti in base alla posizione corrente (memorizzata in $pwd) e non in base alla posizione dello script. Quindi, se avessi lanciato lo script da C:\, sicuramente non avrebbe funzionato.

Ti suggerirei di calcolare i percorsi in base a un argomento (come mostra Peter Seale) o di prendere la posizione effettiva dello script da:

$MyInvocation.MyCommand.Path
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top