In my opinion this is the best way for executing external commands from PowerShell with arguments in a safe manner - via the use of an array to hold the arguments.
Consider this one a PowerShell gem to keep in the toolbox.
Note
The example below makes use of EchoArgs.exe
- a small utility that simply echoes back arguments passed to it. Utility is part of the PowerShell Community Extensions, or the exe alone can be downloaded at https://ss64.com/ps/EchoArgs.exe.
Running example.ps1
yields the following output:
.\example.ps1
Arg 0 is <-switch>
Arg 1 is <-key1>
Arg 2 is <value>
Arg 3 is <-key2>
Arg 4 is <value with spaces>
Arg 5 is </D>
Arg 6 is </S>
Arg 7 is <another argument with spaces>
Note that arguments with spaces are correctly passed to EchoArgs.exe
without the need for quoting or escaping.
Second call to EchoArgs.exe
will pipe all output to output.txt
.