![](/img/trans.png)
[英]powershell start-process doesn't accept two commands in ArgumentList because they have a same parameter
[英]PowerShell Start-Process with -ArgumentList doesn't work
powershell 脚本中非常简单的一行
Start-Process -FilePath displayswitch -ArgumentList "/extend"
它应该扩展我的屏幕。 然而它不起作用,因为 ArgumentList 有问题。 它是什么?
通常,不要使用Start-Process
来调用 CLI(命令行接口;即接受命令行参数的程序),除非您明确希望在新的 window 中异步启动它们 - 有关背景信息,请参阅此答案。
在手头的情况下 - 由于我不知道的原因[1] - Start-Process
似乎还阻止了displayswitch.exe
可执行文件在 arguments 传递时正常运行(您的Start-Process
命令的语法是正确的)。
但是,如果您直接调用displayswitch.exe
,这将是一个有争议的问题,这通常是 CLI 的正确选择: [2]
displayswitch.exe /extend
[1] 问题可能与displayswitch.exe
是GUI 子系统而不是控制台子系统应用程序有关。 也就是说,它不会为自己分配控制台 window,并且在从现有控制台 window 调用时异步操作。 因此,使用Start-Process
可以使可执行文件在没有控制台 window 的情况下运行。 也就是说,从 Windows 运行对话框( WinKey-R )运行displayswitch.exe /extend
,其中不涉及控制台 window ,工作正常。
[2] 鉴于displayswitch.exe
是一个GUI 子系统应用程序,即使在直接调用中它也会异步执行,但我认为这不是问题。 如果您的Start-Process
命令有效,它也将是异步的。 将-Wait
添加到Start-Process
调用使其同步,您可以通过管道直接调用Out-Null
来模拟此行为。 但是,由于displayswitch.exe
的实现方式,即使displayswitch.exe /extend | Out-Null
displayswitch.exe /extend | Out-Null
不会导致完全同步操作。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.