1

A very easy line in a powershell script

Start-Process -FilePath displayswitch -ArgumentList "/extend"

It is supposed to extend my screen. Yet it doesn't work because there is something wrong with the ArgumentList. What is it?

oguz ismail
  • 1
  • 16
  • 47
  • 69
user2762996
  • 566
  • 1
  • 5
  • 16

1 Answers1

1

In general, do not use Start-Process to invoke CLIs (command-line interfaces; i.e., programs that accept command-line arguments), unless you explicitly want to launch them asynchronously, in a new window - see this answer for background information.

In the case at hand - for reasons unknown to me[1] - Start-Process additionally seems to prevent the displayswitch.exe executable from functioning properly when arguments are passed (the syntax of your Start-Process command is correct).

However, that is a moot point if you invoke displayswitch.exe directly, which is generally the right choice for CLIs:[2]

displayswitch.exe /extend

[1] The problem may be related to the fact that displayswitch.exe is a GUI-subsystem rather than a console-subsystem application. That is, it doesn't allocate a console window for itself and operates asynchronously when called from an existing console window. Using Start-Process therefore makes the executable run without a console window. That said, running displayswitch.exe /extend from the Windows Run dialog (WinKey-R), where no console window is involved either, works correctly.

[2] Given that displayswitch.exe is a GUI-subsystem application, it will act asynchronously even in direct invocation, but I assume that's not a problem here. If your Start-Process command had worked, it would have been asynchronous too. Adding -Wait to a Start-Process call makes it synchronous, and you can emulate this behavior in direct invocation by piping to Out-Null. However, due to how displayswitch.exe is implemented, even displayswitch.exe /extend | Out-Null doesn't result in fully synchronous operation.

mklement0
  • 382,024
  • 64
  • 607
  • 775