Question:
I have a folder at C:\Folder that has files input.xml, output.xml and licensegenerator.exe. Licensegenerator.exe takes variables that we put into input.xml and creates a temporary license for one of our programs using the output.xml file. We typically do this via command line by navigating to the C:\Folder directory, then running the command:
1 2 |
LicenseGenerator.exe "C:\Folder\input.xml" "C:\Folder\output.xml" |
I’m attempting to write a script to do the exact same thing in PowerShell, but I’m struggling… Here’s what I have:
1 2 3 4 5 6 |
$inputtest = "C:\Folder\Input.xml" $outputtest = "C:\Folder\Output.xml" $licensegen = "C:\Folder\LicenseGenerator.exe" Invoke-Command $licensegen "$inputtest" "$outputtest" |
When I run this, I get the error:
1 2 3 4 5 6 7 |
Invoke-Command : A positional parameter cannot be found that accepts argument 'C:\Folder\Output.xml'. At line:5 char:1 + Invoke-Command $licengegen "$inputtest" "$outputtest" + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + CategoryInfo : InvalidArgument: (:) [Invoke-Command], ParameterBindingException + FullyQualifiedErrorId : PositionalParameterNotFound,Microsoft.PowerShell.Commands.InvokeCommandCommand |
I have also tried running with Invoke-Expression
but get the exact same error (except it says “Invoke-Expression” at the beginning). Anybody have any idea what I’m doing wrong here?
Answer:
You’re looking for the call operator (&
):
1 2 |
& $licensegen "$inputtest" "$outputtest" |
Invoke-Command
is essentially for running scriptblocks on other hosts and/or in other user contexts.