Не понимаю необходимость бесконечного цикла.
Теперь вывод информации отрабатывает три раза, а имя проверяемого пк спрашивает дважды
потому что вы добавляете введенное имя компа в набор $ArrComputers, а потом дергаете каждый раз весь $ArrComputers через ForEach, т.е. первый ответ на первый ввод, второй и третий ответы - на второй ввод, т.к. в наборе уже два имени
По скрипту вижу такие варианты:
1. Если Вы хотите, чтобы скрипт постоянно висел и спрашивал имя компа (цикл While), тогда набор $ArrComputers и цикл ForEach не нужны, т.е. спросили имя - обработали запрос
2. В переменную $ArrComputers имена компов можно передать через запятую, т.е.
$ArrComputers = Read-Host("Введите имена компьютеров через запятую")
Далее передаете $ArrComputers в параметре -ComputerName командлету Get-WmiObject и форматируете вывод как вам надо:
$computerDrives = Get-WmiObject -Class MSFT_PhysicalDisk -Namespace "root\Microsoft\Windows\Storage" -ComputerName $ArrComputers | Format-Table (или Format-List) prop1,prop2...
$computerOS = get-wmiobject Win32_OperatingSystem -ComputerName $ArrComputers
Цикл ForEach не нужен
3. Убираем цикл While вообще. Набор $ArrComputers заполняем именами компов из какого-нибудь файла, далее обрабатываем их в цикле ForEach.