2015-10-12 3 views
2

Я использую PowerShell, чтобы составить команду для выполнения OpenCover, который имеет флаг -filterКак я могу избежать зарезервированного слова PowerShell?

Однако оказывается, что Filter является одним из зарезервированных слов в PowerShell.

Команда, я произвожу (который прекрасно работает под CMD) является:

OpenCover.Console.exe -output:Coverage.xml -register:user -filter:"+[*]* -[*]*.Test*" -target:nunit-console.exe -targetargs:"Test.dll /config:Release /noshadow /nologo /labels" 

Но когда я запускаю его в PowerShell я получаю сообщение об ошибке:

Incorrect Arguments: The argument [*]*.Test* is not recognised 

ответ

0

вы пробовали чтение " about_Escape_Characters "в разделе PowerShell? https://technet.microsoft.com/en-us/library/hh847755.aspx

СТОП разборе SYMBOL

При вызове других программ, вы можете использовать стоп-разбор символ (-%), чтобы предотвратить Windows PowerShell от генерации ошибки или искажая программы аргументов. Символ остановки-разбора является альтернативой использованию escape-символов в вызовах программы. Он представлен в Windows PowerShell 3.0.

Например, следующая команда использует символ остановки разбора в команде Icacls:

icacls X:\VMS --% /grant Dom\HVAdmin:(CI)(OI)F 

Для получения дополнительной информации о символе останова разбора см about_Parsing.

+0

Привет Крис, я не могу использовать 'Verbatim' как я на PowerShell 2.0 – MaYaN

+0

Ах, это позор. – Chris

3

Это не имеет никакого отношения к filter является зарезервированным словом в PowerShell. Проблема в том, как PowerShell передает параметры собственному приложению. Ваша командная строка будет передана как:

OpenCover.Console.exe -output:Coverage.xml -register:user "-filter:"+[*]* -[*]*.Test*"" -target:nunit-console.exe "-targetargs:"Test.dll /config:Release /noshadow /nologo /labels"" 

Некоторых дополнительные кавычки, добавленных PowerShell, причина того, что неправильная командная строка будет передана в родное приложение.

Первая вещь, которую вы можете попробовать, чтобы изменить командную строку следующее:

OpenCover.Console.exe -output:Coverage.xml -register:user "-filter:+[*]* -[*]*.Test*" -target:nunit-console.exe "-targetargs:Test.dll /config:Release /noshadow /nologo /labels" 

В этом случае никаких дополнительных цитат не будет добавлен PowerShell, и возможно, что OpenCover.Console.exe может распознать вашу команду.

Если это не помогает, чем вы могли бы использовать Start-Process командлет, он никогда не добавляйте никаких дополнительных qoutes:

Start-Process OpenCover.Console.exe '-output:Coverage.xml -register:user -filter:"+[*]* -[*]*.Test*" -target:nunit-console.exe -targetargs:"Test.dll /config:Release /noshadow /nologo /labels"' -NoNewWindow -Wait 
+0

Удивительный! 'Start-Process' работает как шарм! – MaYaN

Смежные вопросы