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 += '"' + 'https://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