如何从控制台输出中隐藏我在MSBuild Exec任务中使用的命令?

时间:2014-08-07 18:41:34

标签: msbuild msbuild-task

我的MSBuild文件中有一个任务,如下所示:

<Exec command="net use $(DeploymentServerName) /user:username passwd" ContinueOnError="false" />

但是在控制台输出中它将转储命令:

...
net use $(DeploymentServerName) /user:username passwd
...

但是如果可能的话,我想隐藏凭证。我不关心命令输出的位置,我只关心命令本身没有回显到控制台。有什么想法吗?

2 个答案:

答案 0 :(得分:13)

从.NET 4.0开始执行MSBuild任务得到属性EchoOFF,它允许实现这一点 - 抑制命令本身的回显(而不是命令输出)。完整文档为here。只需添加EchoOff =&#34; true&#34;到Exec属性列表。

答案 1 :(得分:1)

有几种可能的方法,一种是

<Target Name="DoHideCommand">
  <Exec Command="MSBuild $(MsBuildThisFile) /t:SpecialCommand /nologo /noconsolelogger"/>
</Target>

<PropertyGroup>
  <MyCommand>dir c:</MyCommand>
</PropertyGroup>  

<Target Name="SpecialCommand">
  <Exec Command="dir"/>
</Target>

这将调用单独的msbuild进程来调用实际目标,并隐藏所有输出结果

...
DoHideCommand:
  MSBuild test.targets /t:SpecialCommand /nologo /noconsolelogger
...

这是另一个

<Target Name="SpecialCommandViaFile">
  <PropertyGroup>
    <TmpFile>tmp.bat</TmpFile>
  </PropertyGroup>
  <WriteLinesToFile File="$(TmpFile)" Lines="$(MyCommand)"/>
  <Exec Command="$(TmpFile) > NUL 2>&amp;1" WorkingDirectory="$(MsBuildThisFileDirectory)"/>
  <Delete Files="$(TmpFile)"/>
</Target> 

这会创建一个批处理文件来运行实际命令,然后将所有输出重定向到NUL,只显示以下内容:

...
SpecialCommandViaFile:
tmp.bat > NUL 2>&1
Deleting file "tmp.bat".
...

请注意,执行msbuild文件的文件总是可以打开文件来查看凭据,即使它们在运行时隐藏在输出中也是如此。