我正在使用PowerShell编写一个命令来执行OpenCover
,其中有一个标志-filter
然而,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
这与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
cmdlet,它永远不会添加任何额外的引号:
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
您是否尝试过阅读PowerShell技术上的"about_Escape_Characters"部分?https://technet.microsoft.com/en-us/library/hh847755.aspx
停止解析符号在调用其他程序时,您可以使用停止解析符号(——%)来防止Windows PowerShell生成错误或误解程序参数。停止解析符号是在程序调用中使用转义字符的替代方法。它在Windows PowerShell 3.0中被引入。
例如,以下命令使用了Icacls命令中的停止解析符号:
icacls X:VMS --% /grant DomHVAdmin:(CI)(OI)F
有关停止解析符号的详细信息,请参见about_Parsing。