Вы переворачиваете массив на месте, следовательно, после первого шага у вас есть первый и последний элемент в правильной позиции. После итерации по половине элементов у вас есть первая половина и вторая половина в правильном положении. Теперь, перебирая все элементы, вы меняете каждый элемент дважды, что приводит к исходному массиву.
Можно использовать любой язык программирования, который Вы хотите, пока можно призвать в API COM к WMI.
Похоже, что можно сделать этот вид вещи при помощи ExecQuery (), хотя этот пример находится в C++. BTW этот парень не мог заставить это работать, но можно проверить то, что он делает.
Надеюсь, это поможет.
http://forums.devshed.com/c-programming-42/wmi-wql-querying-problem-in-c-215026.html
Больше программирования WMI:
http://www.vedivi.com/blog/2008/05/how-to-enable-remote-desktop-programmatically/