Question

Intégration continue

Je travaille sur un script PowerShell pour rationaliser notre processus de développement. Je prévoyais de l’organiser après la construction, mais j’ai des problèmes.

À partir de l'invite PowerShell, les éléments suivants fonctionnent à merveille:

PS C:\> ./example.ps1

Cependant, lorsque vous essayez d'exécuter cette opération à partir de cmd.exe comme suit:

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

Le script s'exécute, mais PowerShell génère une série d'erreurs, principalement des erreurs de résolution de chemin issues de la resolve-path fonction:

.
  

Resolve-Path: Impossible de trouver le chemin 'C: \ Documents and Settings \ bdunbar \ Mes documents   \ Visual Studio 2008 \ Projets \ CgmFamilyComm \ FamilyComm \ iirf \ cms \ isapirewrite4.dl   l parce qu'il n'existe pas.   Dans C: \ Documents and Settings \ bdunbar \ Mes documents \ Visual Studio 2008 \ Projects \ C   gmFamilyComm \ scripts \ cms.ps1: 4 char: 27   + $ iirfpath = (chemin de résolution < < < < ../iirf / cms / isapirewrite4.dll) .path,

     

Resolve-Path: Impossible de trouver le chemin 'C: \ Documents and Settings \ bdunbar \ Mes documents   \ Visual Studio 2008 \ Projects \ CgmFamilyComm \ FamilyComm \ familycomm 'parce que c'est le cas   es n'existe pas.   Dans C: \ Documents and Settings \ bdunbar \ Mes documents \ Visual Studio 2008 \ Projects \ C   gmFamilyComm \ scripts \ cms.ps1: 5 char: 27   + $ vdirpath = (chemin de résolution < < < < ../ familycomm) .path

Y at-il un moyen de contourner ce problème? Cela pourrait-il être un problème d’exécuter <=> sous <=>?

[Mise à jour]

J'ai pu changer les choses pour résoudre les erreurs qui se produisent, mais je reçois toujours des erreurs qui fonctionnent parfaitement depuis l'invite de commande powershell. Je ne peux pas comprendre quelle est la différence.

Était-ce utile?

La solution

J'ai déjà fait ce travail dans le passé (voir http: // sharepointpdficon.codeplex.com/SourceControl/changeset/view/13092#300544 si intéressé):

  

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)

Ensuite, jetez ces paramètres dans la première ligne de votre script post-build (si vous pensez pouvoir les utiliser):

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

Je dois également signaler que je ne l'utilise pas pour l'instant. J'ai aimé l'utiliser comme un bloc-notes rapide pour recharger les données de test afin d'exécuter des tests d'intégration.

Autres conseils

On dirait que votre problème est de savoir comment les chemins relatifs sont résolus. Les chemins relatifs sont résolus en fonction de l'emplacement actuel (stocké dans $pwd) et non en fonction de l'emplacement du script. Donc, si vous avez lancé le script à partir de C:\, cela ne fonctionnerait certainement pas.

Je vous suggérerais de calculer les chemins en fonction d'un argument (comme le montre Peter Seale) ou de récupérer l'emplacement réel du script à partir de:

$MyInvocation.MyCommand.Path
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top