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?

12
demandé sur Peter Mortensen 2010-10-06 02:48:43

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
23
répondu Roman Kuzmin 2017-05-23 12:33:48

est-ce que ça marche?

$MSTestCall = @'"C:\Program Files (x86)\Microsoft Visual Studio 10.0\Common7\IDE\MSTest.exe"'@
-1
répondu Andrew Cooper 2010-10-05 22:56:18