12

からMSTest.exeを実行しようとしていますC:\Program Files (x86)\Microsoft Visual Studio 10.0\Common7\IDE。さらに、現在のディレクトリにあるすべてのアセンブリを取得し、それらを個別の/testcontainer引数として設定しています。PowerShellが文句を言わずにこれを行う方法を理解することはできません。

$CurrentDirectory = [IO.Directory]::GetCurrentDirectory()

$MSTestCall = '"C:\Program Files (x86)\Microsoft Visual Studio 10.0\Common7\IDE\MSTest.exe"'

foreach($file in Get-ChildItem $CurrentDirectory) 
{
    if($file.name -match "\S+test\S?.dll$" )
    {
        $MSTestArguments += "/TestContainer:" + $file + " "
    }
}

$MSTestArguments += " /resultsFile:out.trx"
$MSTestArguments += " /testsettings:C:\someDirectory\local64.testsettings"

Invoke-Expression "$MSTestCall $MSTestArguments"

このコードから得られるエラーは次のとおりです。

Invoke-Expression:「/」演算子の右側に値式を指定する必要があります。

名前にスペースが含まれていないディレクトリでmstest.exeを呼び出そうとしても、このエラーは発生しません(追加の「」は必要ありません)。

使ってみると&

&$MSTestCall $MSTestArguments

$ MSTestArgumentsを単一の引数として渡し、MSTestはこれを即座にスローします。提案?

4

2 に答える 2

23

パラメータの配列と演算子を使用することをお勧めします&。ここにある私の答えの例を参照してください:Powershellから変数に格納されたコマンドを実行する

この場合、コードは次のようになります。

$MSTestCall = "C:\Program Files (x86)\Microsoft Visual Studio 10.0\Common7\IDE\MSTest.exe"
$MSTestArguments = @('/resultsFile:out.trx', '/testsettings:C:\someDirectory\local64.testsettings')

foreach($file in Get-ChildItem $CurrentDirectory)  
{ 
    if($file.name -match "\S+test\S?.dll$" ) 
    { 
        $MSTestArguments += "/TestContainer:" + $file
    } 
} 

& $MSTestCall $MSTestArguments
于 2010-10-06T05:45:00.230 に答える
-1

これは機能しますか?

$MSTestCall = @'"C:\Program Files (x86)\Microsoft Visual Studio 10.0\Common7\IDE\MSTest.exe"'@
于 2010-10-05T22:56:18.380 に答える