使用powershell.exe
することは良いアプローチのようですが、もちろんその長所と短所があります。
長所:
- 各スクリプトは、個別のクリーンセッションで呼び出されます。
- クラッシュしても、テストプロセス全体が停止するわけではありません。
短所:
- 呼び出し
powershell.exe
はやや遅いです。
- テストは終了コードに依存しますが、0は必ずしも成功を意味するわけではありません。
潜在的な問題としての問題として言及されている短所はありません。
デモスクリプトは以下のとおりです。PSv2およびv3でテストされています。スクリプト名には、スペース、アポストロフィ、角かっこ、バッククォート、ドルなどの特殊文字が含まれる場合があります。コメント要件で言及されているものの1つは、コード内のスクリプトパスを取得する機能です。提案されたアプローチでは、スクリプトは次のように独自のパスを取得できます
$MyInvocation.MyCommand.Path
# make a script list, use the full paths or explicit relative paths
$scripts = @(
'.\test1.ps1' # good name
'.\test 2.ps1' # with a space
".\test '3'.ps1" # with apostrophes
".\test [4].ps1" # with brackets
'.\test `5`.ps1' # with backticks
'.\test $6.ps1' # with a dollar
'.\test ''3'' [4] `5` $6.ps1' # all specials
)
# process each script in the list
foreach($script in $scripts) {
# make a command; mind &, ' around the path, and escaping '
$command = "& '" + $script.Replace("'", "''") + "'"
# invoke the command, i.e. the script in a separate process
powershell.exe -command $command
# check for the exit code (assuming 0 is for success)
if ($LastExitCode) {
# in this demo just write a warning
Write-Warning "Script $script failed."
}
else {
Write-Host "Script $script succeeded."
}
}