Как решить проблему с выводом значений из реестра через Invoke-Command?
Проще один раз всё загнать в один вызов.
Так и работать будет в разы быстрее и запустить можно одновременно на несколько компов, только в вывод надо имя компа включить

invoke-command -comp $comp {
  # а здесь все красоты
  # причём циклом
  $source @(
    @{ key name= '''; valuename=''},
    @{ key name= '''; valuename=''}
  )
  foreach ($src in $source) {
    get-itemproperty -path $src.keyname | select -expandproperty $src.valuename
  }
}
test опустил...
Проблема у вас в select-object

стандартный вызов, если он со свойствами, пытается подстроить последующий вывод под предыдущие возвращённые свойства. если вы вначале просите свойство "ProductID", то и в последующем вызове PS ждёт свойство ProductID, которого нет, вы подсовываете ему "SerialNumber"

Для этого в моём варианте используется параметр ExpandProperty, который превращает объект в строку
Выполняйте скрипт поблочно - проверяйте, что каждый блок делает то, что вам нужно.