Using powershell, you can use the ‘&’ character to run another application and pass in parameters.
A simple example.
$notepad = 'notepad'
$fileName = 'HelloWorld.txt'
# This will open HelloWorld.txt
& $notepad $fileName
This is good. But what if I want to use business logic to dynamically generate a command string? Using the same simple example:
$commandString = @('notepad', 'HelloWorld.txt') -join ' ';
& $commandString
I get the error:
The term ‘notepad HelloWorld.txt’ is
not recognized as the name of a
cmdlet, function, script file, or
operable program. Check the spelling
of the name, or if a path was
included, verify that the path is
correct and try again.
In my real example I’m trying to dynamically add or remove options to the final command line string. Is there a way I can go about this?
Two ways to do that:
Separate the exe from the arguments
Do all your dynamic stuff for the arguments, but call the exe as normal with the variable holding the arguments afterward:
If you have more than one argument, you should make it an array if it will be separate from the exe part of the call:
Use Invoke-Expression
If everything must be in a string, you can invoke the string as if it were a normal expression.
Invoke-Expressionalso has the alias ofiex.In either case, the contents of the arguments and of the exe should be quoted and formatted appropriately as if it were being written straight on the commandline.