This might be a good time to point out an InStr trick or two.

In Radimus' example, the spaces between the names are not required except to improve readability. It would work exactly the same with or without the spaces.

If every entry is the same length, the position can relate the name to a numeric position. This is useful in argument and menu parsing, or - in your case - performing special tasks on a machine based on information in an array.

For example, take these five names: Tom, Mary, Sally, Peter, John. The longest is 5 chars, so that's our "baselength. Create a string with each name padded with spaces to the baselength.
In this example, I'll create an array of "ages" that associate with each name.
code:
 
$Name = 'Sally' ; name to compare
$Names = 'Tom Mary SallyPeterJohn '
$Ages = 22,19,27,24,26

; Position returned, less 1, makes value Zero-Based
$Pos = InStr($Names, $Name) - 1

If Position is -1, it wasn't found - zero or greater is OK
If $Pos >= 0
; divide by the baselength to find the ID
$ID = $Pos / 5
? $Name + ' is ' + $Ages[$ID] + ' years old! (ID is ' + $ID + ')'
Else
? 'Invalid name specified!'
EndIf

You can see how InStr returns a number (11 for Sally), which is reduced by one (now 10). Divide by the baselength (10/5=2) and it returns the array position or ID of the name found.

If you specify a name not in the list, InStr returns zero, which becomes -1 - easy to test for invalid names. In your case, an "invalid" name would actually get upgraded, and the others would either be skipped or have another action performed (as defined in the array, possibly, making each upgrade user/system specific).

Just a few more concpts on using InStr.. The code can be shortened a bit and functions combined, but I left it simple to illustrate the process.

Regards,

Glenn
_________________________
Actually I am a Rocket Scientist! \:D