Frage

Continuous Integration

Ich habe auf einem Powershell-Skript arbeitet unsere Entwicklungsprozess rationalisiert zu halten. Ich hatte geplant, auf sie als Post-Build-Ereignis ausgeführt wird, aber ich bin ein paar Probleme haben.

Von der Powershell-Eingabeaufforderung die folgenden Werke wunderbar:

PS C:\> ./example.ps1

Wenn jedoch versucht, diese von cmd.exe zu laufen wie folgt:

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

Das Skript wird ausgeführt, aber ich erhalte eine Runde von Fehlern von Powershell zurück, die hauptsächlich aus Wegauflösung Fehlern aus der resolve-path Funktion:

  

Resolve-Path: Kann nicht finden Pfad ‚C: \ Dokumente und Einstellungen \ bdunbar \ Eigene Dateien   \ Visual Studio 2008 \ Projects \ CgmFamilyComm \ FamilyComm \ IIRF \ cms \ isapirewrite4.dl   l‘, weil es nicht existiert.   Bei C: \ Dokumente und Einstellungen \ bdunbar \ Eigene Dateien \ Visual Studio 2008 \ Projects \ C   gmFamilyComm \ scripts \ cms.ps1: 4 Zeichen: 27   + $ Iirfpath = (Auflösungs-Pfad <<<< ../ IIRF / cms / isapirewrite4.dll) .path,

     

Resolve-Path: Kann nicht finden Pfad ‚C: \ Dokumente und Einstellungen \ bdunbar \ Eigene Dateien   \ Visual Studio 2008 \ Projects \ CgmFamilyComm \ FamilyComm \ familycomm‘, weil es tun   es nicht existieren.   Bei C: \ Dokumente und Einstellungen \ bdunbar \ Eigene Dateien \ Visual Studio 2008 \ Projects \ C   gmFamilyComm \ scripts \ cms.ps1: 5 Zeichen: 27   + $ Vdirpath = (Auflösungs-Pfad <<<< ../ familycomm) .path

Gibt es eine Möglichkeit, dies zu umgehen? Könnte es ein Problem sein, mit resolve-path unter cmd.exe läuft?

[Update]

Ich habe in der Lage, Dinge zu ändern um die Fehler zu erhalten, die auftritt, ist, aber ich immer noch Fehler, die von der Powershell-Eingabeaufforderung perfekt funktionieren. Ich kann nicht herausfinden, was der Unterschied ist.

War es hilfreich?

Lösung

Ich habe diese Arbeit in der Vergangenheit (siehe http: // sharepointpdficon.codeplex.com/SourceControl/changeset/view/13092#300544 wenn interessiert):

  

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

Dann diese Parameter in der ersten Zeile des Post-Build-Skript werfen (wenn Sie denken, Sie in der Lage sein können, sie zu benutzen):

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

Auch soll ich darauf hinweisen, verwende ich diese derzeit nicht. Ich habe, wie es als eine schnelle Scratchpad mit Testdaten für die Ausführung von Integrationstests neu zu laden.

Andere Tipps

Sieht aus wie Ihr Problem ist, wie relative Pfade aufgelöst werden. Relative Pfade werden basierend auf der aktuellen Position (gespeichert in $pwd) und nicht auf der Grundlage der Position des Skripts gelöst. Also, wenn Sie das Skript von C:\ ins Leben gerufen, wäre es auf jeden Fall nicht.

Ich würde vorschlagen, dass Sie die Pfade auf ein Argument berechnen basiert (wie Peter Seale zeigt), oder die aktuelle Position des Skripts greifen aus:

$MyInvocation.MyCommand.Path
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top