Exécuter un fichier EXE en utilisant PowerShell à partir d'un répertoire avec des espaces
j'essaie de lancer MSTest.exe de C:Program Files (x86)Microsoft Visual Studio 10.0Common7IDE
. De plus, je prends toutes les assemblées dans mon répertoire courant et je les configure comme des arguments séparés /testcontainer. Je ne peux pas comprendre comment faire sans PowerShell se plaindre.
$CurrentDirectory = [IO.Directory]::GetCurrentDirectory()
$MSTestCall = '"C:Program Files (x86)Microsoft Visual Studio 10.0Common7IDEMSTest.exe"'
foreach($file in Get-ChildItem $CurrentDirectory)
{
if($file.name -match "S+testS?.dll$" )
{
$MSTestArguments += "/TestContainer:" + $file + " "
}
}
$MSTestArguments += " /resultsFile:out.trx"
$MSTestArguments += " /testsettings:C:someDirectorylocal64.testsettings"
Invoke-Expression "$MSTestCall $MSTestArguments"
l'erreur que j'obtiens de ce code est:
Invoke-Expression: vous devez fournir une expression de valeur à droite de l'opérateur'/'.
je ne comprends pas cette erreur quand j'essaie d'appeler un mstest.exe dans un répertoire sans espace dans le nom (sans "s'sont nécessaires).
quand j'essaie d'utiliser &
,
&$MSTestCall $MSTestArguments
C'mains $MSTestArguments plus qu'un seul argument, qui MSTest prompty jette. Des Suggestions?
2 réponses
je vous recommande d'utiliser un tableau de paramètres et l'opérateur &
. Voir les exemples dans ma réponse ici: exécuter une commande stockée dans une Variable de Powershell
dans ce cas le code devrait être quelque chose comme ceci:
$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
est-ce que ça marche?
$MSTestCall = @'"C:\Program Files (x86)\Microsoft Visual Studio 10.0\Common7\IDE\MSTest.exe"'@