2009-05-01 6 views
17

연속 통합

저는 개발 프로세스를 간소화하기 위해 PowerShell 스크립트를 사용하고 있습니다. 포스트 빌드 이벤트로 실행하려고했지만 문제가 있습니다.PostBuild의 PowerShell 스크립트

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

스크립트가 실행하지만 오류의 라운드를 얻을 : cmd.exe에서이 작업을 실행하려고 할 때

PS C:\> ./example.ps1 

그러나, 다음과 같이 훌륭하게 PowerShell 프롬프트 다음 작품에서

PowerShell을 사용하여 대부분 resolve-path 함수의 경로 확인 오류로 구성됩니다.

Resolve-Path : 'C : \ Documents and Settings \ bdunbar \ My Documents'경로가 없으므로 ' \ Visual Studio 2008 \ Projects \ CgmFamilyComm \ FamilyComm \ iirf \ cms \ isapirewrite4.dl'경로를 찾을 수 없습니다. C에서 : \ 문서 및 설정 \ bdunbar 내 문서 프로젝트 \ 비주얼 스튜디오 2008 \ \ \ C gmFamilyComm 스크립트 \ \ cms.ps1 : 4 문자 : 27 + $ iirfpath = (해결 경로 < < < < ../ IIRF/CMS/isapirewrite4.dll) .path,

해결 경로 : 경로를 찾을 수 없습니다 'C : \ 문서 및 설정 \ bdunbar 비주얼 스튜디오 2008 \ 내 문서 \ 프로젝트 \ \ CgmFamilyComm \ familyComm familycomm \'그것 때문에 do 존재하지 않습니다. C에서 : \ 문서 및 설정 \ bdunbar 내 문서 프로젝트 \ 비주얼 스튜디오 2008 \ \ \ C gmFamilyComm 스크립트 \ \ cms.ps1 : 5 문자 : 27 + $ vdirpath = (해결 경로 < < < < ../ familycomm). 경로

해결 방법이 있습니까? cmd.exe 아래 resolve-path을 실행하는 데 문제가 있습니까?

[업데이트]

나는 발생하는 오류를 해결하기 위해 상황을 타개 할 수있었습니다,하지만 난 여전히 PowerShell 명령 프롬프트에서 완벽하게 잘 작동 오류가 나타납니다. 나는 그 차이가 무엇인지 알 수 없다.

+0

. 차이점은 아마도 해결 경로 행과 관련이있을 것입니다. 의심 스럽다면 resolve-path를 사용하지 않고 스크립트를 작동 시키십시오. –

답변

25

내가 과거에이 일을했습니다 (관심 경우 http://sharepointpdficon.codeplex.com/SourceControl/changeset/view/13092#300544 참조)

C : \ WINDOWS \ system32를 \의 WindowsPowerShell \ V1.0 \ powershell.exe를 -nologo -NonInteractive -Command. '$ (TargetDir)'- TargetFileName : '$ (TargetFileName)'- TargetName (대상 폴더 이름) '$ (ProjectDir) Deployment \ PostBuildScript.ps1' -ProjectDir : '$ (ProjectDir)'- 구성 이름 : '$ (구성 이름) : '$ (TargetName)

그런 다음이 매개 변수를 빌드 후 스크립트의 첫 번째 줄에 넣습니다 (y OU는) 사용할 수 있습니다 생각 :

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

이 또한 내가 지적해야한다, 나는 현재이 사용하고 있지 않다.필자는 통합 테스트를 실행하기 위해 테스트 데이터를 다시로드하기 위해 빠른 스크래치 패드로 사용했습니다.

+0

Peter에게 감사드립니다.이 기능은 완벽하게 작동합니다. 이것은 . 파일 이름 앞에 와서 거기에 넣는 방법을 어떻게 알았습니까? 다시 한 번 감사드립니다. +1. – brad

+0

하하, 내가 아는 것이 좋겠다. 내가 생각하는 채널 9 포럼 스레드에서 찾은 스크립트에서 광산을 함께 수화했는데 이제는 찾을 수 없습니다. –

+0

스크립트에 점을 포함시키고 인수를 스크립트에 전달할 수 있다고 생각하지는 않지만 스크립트가 포함 된 점을 짐작할 수 있습니다. 흥미 롭 군. 어쨌든, & -executed 대 dot-included 스크립트를 사용하면 resolve-path가 다르게 작동합니다. –

3

문제는 상대 경로가 해결되는 방법입니다. 상대 경로는 스크립트의 위치를 ​​기반으로하지 않고 현재 위치 ($ pwd에 저장 됨)에 따라 결정됩니다. 따라서 C : \에서 스크립트를 실행하면 확실히 작동하지 않습니다.

나는 당신이 (피터 SEALE 보여줍니다 같은) 인수를 기반으로 경로를 caculate 제안, 또는에서 스크립트의 실제 위치를 잡아 것 : 제이슨은 말했다 무엇

$MyInvocation.MyCommand.Path 
관련 문제