Вы вызываете функцию неправильно. Вы не ставите круглые скобки вокруг аргументов, но передаете их как аргументы командной строки. Так что в вашем случае измените:
foo('a',$dict)
до:
foo 'a' $dict
или, более четко:
foo -item 'a' -dict_of_item $dict
PowerShell интерпретировал ('a',$dict)
как массив, и вы получили:
$item = ('a',$dict)
$dict_of_item = $null
Поскольку ваш тест не пройден с этими аргументами, он возвращает $item
вам. То есть он возвращает массив с символом и словарем, который вы видите на экране.