PowerShell – 启动进程和Cmdline开关

我可以运行这个罚款:

$msbuild = "C:\WINDOWS\Microsoft.NET\Framework\v3.5\MSBuild.exe" start-process $msbuild -wait 

但是当我运行这个代码(下面),我得到一个错误:

 $msbuild = "C:\WINDOWS\Microsoft.NET\Framework\v3.5\MSBuild.exe /v:q /nologo" start-process $msbuild -wait 

有没有一种方法,我可以传递参数到MSBuild使用启动过程? 我打开不使用启动过程,我使用它的唯一原因是我需要有“命令”作为variables。

当我有
C:\ WINDOWS \ Microsoft.NET \ Framework \ v3.5 \ MSBuild.exe / v:q / nologo
在一行本身,如何得到在Powershell中处理?

我应该使用某种types的eval()函数吗?

你将要把你的参数分成单独的参数

 $msbuild = "C:\WINDOWS\Microsoft.NET\Framework\v3.5\MSBuild.exe" $arguments = "/v:q /nologo" start-process $msbuild $arguments 

使用明确的参数,将是:

 $msbuild = 'C:\WINDOWS\Microsoft.NET\Framework\v3.5\MSBuild.exe' start-Process -FilePath $msbuild -ArgumentList '/v:q','/nologo' 

编辑:报价。

警告

如果从Powershell创build的cmd.exe窗口运行PowerShell,则第二个实例不再等待作业完成。

 cmd> PowerShell PS> Start-Process cmd.exe -Wait 

现在从新的cmd窗口再次运行PowerShell,并在其中启动第二个cmd窗口:cmd2> PowerShell

 PS> Start-Process cmd.exe -Wait PS> 

PowerShell的第二个实例不再支持-Wait请求和所有后台进程/作业返回“Completed”状态,即使您仍在运行!

当我使用C#Explorer程序打开cmd.exe窗口并从该窗口运行PS时,我发现了这一点,它也忽略了-Wait请求。 看起来,任何cmd.exe的“win32作业”的PowerShell都无法遵守等待请求。

我在Windows 7 / x64上使用PowerShell 3.0版运行

我发现使用cmd可以很好地作为替代方法,特别是当你需要从被调用的应用程序中输出输出(特别是当它没有内置日志时,与msbuild不同)

cmd /C "$msbuild $args" >> $outputfile

除非OP使用PowerShell社区扩展,它提供了一个Start-Process cmdlet以及其他许多扩展。 如果是这种情况,那么Glennular的解决scheme就可以工作,因为它匹配pscx \ start-process:-path(位置1) – 参数(位置2)的位置参数。