This broadly illustrates how I Get and Set primitive parameters:
//This script goes in the child prim and is typically controlled from the root prim.
list POSITION1 = [<0.0, 0.0, 0.0>];
list SIZE1 = [<1.0, 1.0, 1.0>];
list TYPE1 = [0, 0, <0.0, 1.0, 0.0>, 0.0, <0.0, 0.0, 0.0>, <1.0, 1.0, 0.0>, <0.0, 0.0, 0.0>];
list POSITION2 = [<0.0, 0.0, 0.0>];
list SIZE2 = [<1.0, 1.0, 1.0>];
list TYPE2 = [0, 0, <0.0, 1.0, 0.0>, 0.0, <0.0, 0.0, 0.0>, <1.0, 1.0, 0.0>, <0.0, 0.0, 0.0>];
list pParams;
default
{
link_message(integer sender_number, integer int, string str, key id)
{
if (str == "get")
{
llOwnerSay("PRIM_POSITION " + (string)llGetLocalPos());
llOwnerSay("PRIM_SIZE " + (string)llGetPrimitiveParams([PRIM_SIZE]));
llOwnerSay("PRIM_TYPE " + (string)llGetPrimitiveParams([PRIM_TYPE]));
}
else if (str == "set1")
{
pParams = [];
pParams += [PRIM_POSITION] + POSITION1;
pParams += [PRIM_SIZE] + SIZE1;
pParams += [PRIM_TYPE] + TYPE1;
llSetPrimitiveParams(pParams);
}
else if (str == "set2")
{
pParams = [];
pParams += [PRIM_POSITION] + POSITION2;
pParams += [PRIM_SIZE] + SIZE2;
pParams += [PRIM_TYPE] + TYPE2;
llSetPrimitiveParams(pParams);
}
}
}
The steps are that you manually edit the child prim into the first position and then send it the "get" Link Message. It then reports its settings... which you make a note of.

Then manually edit the child prim to its second position, "get" settings, make a note - and so on, if you have more transformations.
The fiddly bit is that you then have to manually transcribe the settings you made a note of into properly formed list elements and paste them into the script. The "set1", and "set2" Link Messages will then set those parameters.
I include the 6 populated lists so that you get an idea of what they look like. You'll need to "get" your own values.
You can, of course, Get and Set more or less of the parameters. It gets a deal trickier if you're interested in any of the per-face parameters.

To just change the postion I think llGetLocalPos, and llSetPos would suffice.