PowerShell - Start-Process and Cmdline Switches

17 浏览
0 Comments

PowerShell - Start-Process and Cmdline Switches

我可以成功运行以下代码:

$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

有没有办法在使用start-process时传递参数给MSBuild?我可以不使用start-process,我使用它的唯一原因是我需要将"command"作为一个变量。

当我在一行上有

C:\WINDOWS\Microsoft.NET\Framework\v3.5\MSBuild.exe /v:q /nologo

在Powershell中,如何处理它?我应该使用某种eval()函数,而不是使用start-process吗?

0
0 Comments

问题出现的原因是在通过Powershell创建的cmd.exe窗口中运行PowerShell时,第二个实例不再等待作业完成。

解决方法:

要解决这个问题,可以尝试以下方法:

1. 在第二个实例的PowerShell命令中使用-ArgumentList参数来传递命令行参数,而不是使用-Command参数。这样可以确保第二个实例的PowerShell命令能够正常等待作业完成。

2. 如果你的C# Explorer程序用于打开cmd.exe窗口并从该窗口运行PowerShell,可以尝试使用其他方法来打开cmd.exe窗口,例如使用System.Diagnostics.Process.Start方法来启动cmd.exe。

3. 可以尝试升级PowerShell版本,或者在不同的操作系统上进行测试,以确定是否存在版本或操作系统的特定问题。

以上是关于(PowerShell - Start-Process and Cmdline Switches)问题的原因和解决方法的相关内容。在使用PowerShell时,需要注意这个问题可能会导致作业无法正常等待完成。

0
0 Comments

问题的原因是在使用PowerShell的Start-Process命令时,参数需要进行分开处理,不能直接将所有参数放在一个变量中。解决方法是将参数分开存储,并在调用Start-Process时将其作为参数传递。

以下是解决该问题的示例代码:

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

在上述代码中,我们将MSBuild.exe的路径存储在$msbuild变量中,将参数"/v:q /nologo"存储在$arguments变量中。然后,我们使用Start-Process命令调用MSBuild.exe,并将$msbuild和$arguments作为参数传递。

另外,需要注意的是,变量名$args在PowerShell中是保留的,不能作为参数变量名使用。可以使用其他名称,如$arguments。

同时,还需要理解-ArgumentList参数需要一个字符串,因此如果要从数组中传递参数列表,最好在调用之前将其“解包”为一个字符串。可以使用逗号分隔的字符串(实际上是一个数组),因为PowerShell在可能的情况下会将其展开。但如果要从数组中传递参数列表,最好先将其转换为字符串。

通过运行get-help start-process命令,我们可以看到-ArgumentList参数期望的是一个字符串数组(String[])。

0
0 Comments

问题出现的原因是在使用PowerShell的Start-Process命令和命令行开关时,输入参数的方式不一致导致的。解决方法是使用正确的语法来传递参数。

在上述内容中,第一段代码展示了使用显式参数的例子,即将参数以字符串形式传递给-ArgumentList参数。然后,建议使用引号将参数括起来,以确保参数的正确传递。第二段代码是对第一段代码的修正,将参数以数组形式传递给-ArgumentList参数,这样更可靠。第三段代码讨论了PowerShell的冗长性,与*nix相比,使用PowerShell的Start-Process命令更冗长。第四段代码给出了一个更简洁的示例,使用start git -args gui的方式来传递参数。作者指出,尽管PowerShell的语法相对冗长,但通过使用tab键补全和别名,可以大大减少输入的字符数。作者还补充说,冗长的语法可以让不熟悉PowerShell的人更容易理解命令的具体作用,这是一种哲学上的差异。

最后,有人在评论中感谢了这些更新,并表示在查阅文档和示例时没有看到这些用法。

0