Я не знаю, имеет ли это большое значение, но не $. это должно быть $ _.
Я попробовал этот скрипт, и он прекрасно работает для меня:
get-childitem -Path "E:\source" |
where-object {$_.LastWriteTime -lt (get-date).AddDays(-31)} |
move-item -destination "F:\target"
Обратите внимание, что вам не нужен цикл foreach, потому что объекты будут "переданы" в команду move-item