PS: вывести отдельно массив значений переменной из цикла

Возможно элементарный вопрос, но за 3 дня прогресса не достиг. Есть скрипт, который берет список ПК из домена/файла, и по этому списку в цикле проверяет значение параметра реестра. Если значение совпадает/присутствует - пишем "ок", не совпадает - пишем "не ок" и заносим в файл. Вопрос как сделать вывод не в файл, а в переменную и в конце цикла вывести эту переменную в консоль. Т.е. цикл работает по списку и обрабатывает вперемешку ок/не ок ПК, получается мешанина, учитывая что ПК может быть сотни. Хотелось бы видеть "не ок" в конце как резюмирующий итог. В файл работает прекрасно, но в переменной вижу только последний в списке ПК. Пробовал по разному (>> $bb, Out-String -Append и т.д.) - результата нет. Делать последовательно второй цикл глупо имхо. Заранее спасибо за идеи.

$Computers = Get-Content .\host.txt

foreach ($Computer in $Computers) {
if (Test-Connection $Computer -Count 1 -erroraction silentlyContinue ) {

try {
    $Reg = [Microsoft.Win32.RegistryKey]::OpenRemoteBaseKey('LocalMachine', $Computer)
    $RegKey = $Reg.OpenSubKey("SOFTWARE\DameWare Development\Mini Remote Control Service\Settings")

    if ($RegKey) {
        $RegValue = $RegKey.GetValue("Permission Required")

        if ($RegValue -eq 1) {Write-Host "На компьютере $Computer все ок" -ForegroundColor Green} 
        else {
        Write-Host "На ПК $Computer нужно исправить" -ForegroundColor Red 
        Write-Output "$Computer"  >> .\bad.txt # Запись в файл
        $bb = Write-Output "$Computer"  # Неработающий вывод в переменную. В ней только последний ПК
          }
    } 
       } 
        catch { Write-Host "$Computer - $_" -ForegroundColor Yellow }
   }
  else { write-host "$Computer offline" }        
 }
 write-host "___________________" # разделитель
 Write-output $bb  # резюмирующий итог "не ок" ПК

Ответы (1 шт):

Автор решения: Dyakov Alexander

Дабы не превращать строку в массив, лучше сразу собирать в массив, и обнулять его лучше всё же в начале скрипта, так как в конце можно ещё с ним поработать.

$Computers = Get-Content .\host.txt
$bb = New-Object System.Collections.ArrayList($null)

Foreach ($Computer in $Computers) {
    if (Test-Connection $Computer -Count 1 -erroraction silentlyContinue ) {
        try {
            $Reg = [Microsoft.Win32.RegistryKey]::OpenRemoteBaseKey('LocalMachine', $Computer)
            $RegKey = $Reg.OpenSubKey("SOFTWARE\DameWare Development\Mini Remote Control Service\Settings")
    
            if ($RegKey) {
                $RegValue = $RegKey.GetValue("Permission Required")
    
                if ($RegValue -eq 1) {Write-Host "На компьютере $Computer все ок" -ForegroundColor Green} 
                else {
                    Write-Host "На ПК $Computer нужно исправить" -ForegroundColor Red 
                    Write-Output "$Computer"  >> .\bad.txt # Запись в файл
                    $bb.Add($Computer)
                }
            } 
        } 
        catch { Write-Host "$Computer - $_" -ForegroundColor Yellow }
    }
    else { write-host "$Computer offline" }        
}
write-host "___________________" # разделитель
if ($bb.count -gt 0){
    Return $bb  # резюмирующий итог "не ок" ПК
}
→ Ссылка