質問
継続的な統合
開発プロセスを合理化するために、PowerShellスクリプトに取り組んでいます。ビルド後のイベントとして実行することを計画していましたが、問題があります。
PowerShellプロンプトから、次のように動作します。
PS C:\> ./example.ps1
ただし、次のようにcmd.exe
からこれを実行しようとすると、
C:\> powershell -command "&\"C:\path to script\example.ps1\""
スクリプトは実行されますが、PowerShellからエラーのラウンドが返されます。これは、主にresolve-path
関数からのパス解決エラーで構成されています。
Resolve-Path:パス 'C:\ Documents and Settings \ bdunbar \ My Documentsが見つかりません \ Visual Studio 2008 \ Projects \ CgmFamilyComm \ FamilyComm \ iirf \ cms \ isapirewrite4.dl l 'が存在しないため。 C:\ Documents and Settings \ bdunbar \ My Documents \ Visual Studio 2008 \ Projects \ C gmFamilyComm \ scripts \ cms.ps1:4 char:27 + $ iirfpath =(resolve-path <!> lt; <!> lt; <!> lt; <!> lt; ../ iirf / cms / isapirewrite4.dll).path、
Resolve-Path:パス 'C:\ Documents and Settings \ bdunbar \ My Documentsが見つかりません \ Visual Studio 2008 \ Projects \ CgmFamilyComm \ FamilyComm \ familycomm ' esは存在しません。 C:\ Documents and Settings \ bdunbar \ My Documents \ Visual Studio 2008 \ Projects \ C gmFamilyComm \ scripts \ cms.ps1:5 char:27 + $ vdirpath =(resolve-path <!> lt; <!> lt; <!> lt; <!> lt; ../ familycomm).path
これを回避する方法はありますか? <=>の下で<=>を実行すると問題になる可能性がありますか?
[更新]
発生しているエラーを回避するために物事を変更することができましたが、powershellコマンドプロンプトから完全に正常に機能するエラーを受け取ります。違いがわからない。
解決
過去にこの作業を行いました( http:// sharepointpdficon.codeplex.com/SourceControl/changeset/view/13092#300544 興味がある場合):
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)
次に、これらのパラメータをビルド後スクリプトの最初の行にスローします(使用できると思われる場合):
param($ProjectDir, $ConfigurationName, $TargetDir, $TargetFileName)
また指摘しておきますが、私は現在これを使用していません。統合テストを実行するためのテストデータをリロードするためのクイックスクラッチパッドとして使用するのが好きでした。
他のヒント
問題のように見えるのは、相対パスの解決方法です。相対パスは、スクリプトの場所ではなく、現在の場所($pwd
に保存)に基づいて解決されます。したがって、C:\
からスクリプトを起動した場合、間違いなく動作しません。
引数に基づいてパスを計算することをお勧めします(ピーターシールが示すように)、またはスクリプトの実際の場所を以下から取得します。
$MyInvocation.MyCommand.Path