繁体   English   中英

PowerShell 使用 -ArgumentList 启动进程不起作用

[英]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.exeGUI 子系统而不是控制台子系统应用程序有关。 也就是说,它不会为自己分配控制台 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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM