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 шт):
Дабы не превращать строку в массив, лучше сразу собирать в массив, и обнулять его лучше всё же в начале скрипта, так как в конце можно ещё с ним поработать.
$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 # резюмирующий итог "не ок" ПК
}