気まぐれで、PowerShell を学習するために、MSBuild を使用してコード内の一連のソリューションをクリーンアップし、特定の引数セットでそれらをビルドするための非常に単純なスクリプトを作成することにしました。スクリプトは次のとおりです。
$sourceDir = Split-Path -Path $MyInvocation.MyCommand.Definition -Parent
$cleanArgs = '/t:clean /verbosity:q /nologo /P:Configuration=Debug'
$buildArgs = '/verbosity:q /nologo /P:Platform="Any CPU";Configuration=Debug'
$solutions = @("asdf.sln","qwer.sln","zxcv.sln","yuio.sln","hjkl.sln","nm.sln")
function buildWithArgs([string[]]$solutionsToBuild = @(), [string]$args = 'default')
{
Write-Host args: $args
foreach($sln in $solutionsToBuild)
{
& $env:WINDIR\Microsoft.NET\Framework64\v4.0.30319\msbuild.exe "$sourceDir\$sln $args" | Out-Default
}
}
buildWithArgs $solutions $buildArgs
buildWithArgs $solutions $cleanArgs
さて、私の問題は、関数「buildWithArgs」が $args パラメーターを尊重しないことです。これは、スクリプトを実行またはデバッグするときに、何を渡しても常に空です。しかし、$solutionsToBuild パラメーターは問題なく動作します。不適切な構文がありますか? $cleanArgs 文字列が何らかの形で不適切にフォーマットされていたり、エスケープされていなかったとしても、実行時に $args が常に空であるため、"asdf" のような単純な文字列で関数を機能させることさえできません。確かに小さなばかげたエラーであることにあなたが提供できる助けに感謝します!