Starting a command-line process from PowerShell is very easy. A simple java -jar helloworld.jar
works just fine. However when I’m starting nodes in my Selenium Grid I need to dynamically create a different number of parameters. The following code will fail because the various strings wont be correctly mapped to the usual argv[] input parameters for the java.exe
process:
$arguments = '' $arguments += ' ' + '-jar xxxx.jar' $arguments += ' ' + '-browser' $arguments += ' ' + 'browserName=firefox,version=3.6,platform=WINDOWS' $arguments += ' ' + '-browser' $arguments += ' ' + 'browserName=internet explorer,version=10,platform=WINDOWS' java $arguments
Instead, just create an array of command-line arguments like this (assume that $Capabilities
is an array of hash tables)
$arguments = @() $arguments += '-jar' $arguments += $Jar $arguments += '-role' $arguments += 'node' $arguments += '-port' $arguments += 5555 $arguments += '-hub' $arguments += '"' + 'http://127.0.0.1:4444/grid/register' + '"' foreach ($hashTable in $Capabilities) { $arguments += '-browser' $strCaps = ($hashTable.GetEnumerator() | ForEach-Object { '$($_.Key)=$($_.Value)' }) -join ',' $strCaps = '"' + $strCaps + '"' $arguments += $strCaps } java $arguments