2009-05-01 17 views
17

継続的インテグレーション

私は開発プロセスを合理化するためにPowerShellスクリプトを作成しています。私はポストビルドイベントとして実行する予定でしたが、何か問題があります。PostBuildのPowerShellスクリプト

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

スクリプトが実行されるが、私はエラーのラウンドを取得し、次のようcmd.exeからこれを実行しようとただし

PS C:\> ./example.ps1 

、:素晴らしくPowerShellのプロンプトで、次の作品から

多くの場合、resolve-path関数からのパス解決エラーで構成されるPowerShellから戻ってきます。

Resolve-Path:パス 'C:\ Documents and Settings \ bdunbar \ My Documents \ Visual Studio 2008 \ Projects \ CgmFamilyComm \ FamilyComm \ iirf \ cms \ isapirewrite4.dl 'が存在しないため見つかりません。 Cで :プロジェクト\ C gmFamilyComm \スクリプト\ Visual Studioの2008 \ \ DocumentsとSettings \ bdunbar \マイドキュメント\ cms.ps1:4文字:27 + $ iirfpath =(解決パス< < < < ../ IIRF/CMS/isapirewrite4.dll).path、

解決-パス:パスが見つかりません 'C:\ DocumentsとSettings \ bdunbarのVisual Studio 2008 \マイドキュメント \プロジェクト\ \ CgmFamilyComm \ familyComm familycomm \' があるためdo は存在しません。 Cで :プロジェクト\ C gmFamilyComm \スクリプト\ Visual Studioの2008 \ \ DocumentsとSettings \ bdunbar \マイドキュメント\ cms.ps1:5文字:27 + $ vdirpath =(解決パス< < < < ../ familycomm).path

これを回避する方法はありますか? 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

ピーターのおかげで、これは完璧に動作します。それは何ですか?ファイル名の前に置いて、そこに置く方法をどうやって知っていましたか?もう一度ありがとう、私から+1。 – brad

+0

笑、私が知りたかったのです。私が思いついたChannel 9フォーラムのスレッドで見つけたスクリプトから、私は一緒に私のことを洞くった。今は見つけられない。 –

+0

スクリプトにドットを含めると引数をスクリプトに渡すことはできないとは思っていましたが、スクリプトが含まれていると思います。面白い。 解決策パスは、スクリプトを実行したときと実行したときに別々に動作します。 –

3

あなたの問題は、相対パスがどのように解決されるかのように見えます。相対パスは、スクリプトの場所に基づいていない現在の場所($ pwdに格納されている)に基づいて解決されます。したがって、C:\からスクリプトを起動した場合は、間違いなく動作します。

私は(ピーターSealeのが示しように)あなたは、引数に基づいてパスをcaculate示唆、または、スクリプトの実際の位置をつかむでしょう:ジェイソンが言っ

$MyInvocation.MyCommand.Path 
関連する問題