Powershell // CSV-вывод в foreach

Я работаю с SCOM (SystemCenterOperationsManager) и написал небольшой скрипт для запланированной задачи.

Он должен собирать все оповещения NEW ( ResolutionState = 0 ) и фильтровать их с помощью моего правила с подстановочными знаками.

Это изменит состояние разрешения для всех собранных предупреждений на определенное состояние разрешения.

Моя проблема:

Чтобы получить отчет обо всех выбранных оповещениях, я хочу создать «Out-файл». Где его разместить?

Вот мой код:

if ($LastHourAlerts)
{
   foreach($Alert in $LastHourAlerts)
   {      
   $newState = $null

   switch -wildcard ($Alert.Name) 
      {
      "Operations Manager failed to start a process" { $newState = 255 } 
      "Operations Manager failed to check the state of a service" { $newState = 255 }
      "Operations Manager failed to run a WMI query" { $newstate =255 }
      "Interface Utilization Alert" { $newState = 15 }
      "Veeam VMware: Datastore Provisioning Analysis" { $newState = 17 }
      "Veeam VMware Collector: VMware connection data processing errors" { $newState = 17 }
      "Veeam VMware Collector: VMware connection is unavailable" { $newState = 17 }
      "Veeam VMware: Virtual Machine Memory Usage Analysis" { $newState = 17 }
      "Veeam VMware: Virtual Machine CPU Usage Analysis" { $newState = 17 }
      "Veeam VMware: Virtual Machine Memory Ballooning and Swapping Analysis" { $newState = 17 }
      "Veeam VMware: Virtual Machine Storage Latency Analysis" { $newState = 17 }
      "Veeam VMware: Virtual Machine Consolidation Needed status Alarm" { $newState = 17 }
      "Veeam VMware: Maintenance Mode Tracker" { $newState = 17 }
      "Veeam VMware: vSphere Host Storage Commands Failed Analysis" { $newState = 17 }
      "Veeam VMware: vSphere Host Network Packet Loss Analysis" { $newState = 17 }
      "Veeam VMware: vSphere Host Memory Swapping Analysis" { $newState = 17 }
      "Veeam VMware: vSphere Host Memory Usage Analysis" { $newState = 17 }
      "Veeam VMware: vSphere Host Kernel Latency Analysis" { $newState = 17 }
      "Veeam VMware: vSphere Cluster Memory Overcommit Analysis" { $newState = 17 }
      "Veeam VMware: VM customization failed" { $newState = 17 }

      }


      if($newState -ne $null)
         {
         $Alert.ResolutionState = $newState
         $Alert.Update(“Resolution State changed automatically by Automation”)              
         }
     }    
}

Я пробовал что-то вроде этого в конце цикла if:

$Alert.Name | Out-File ("$path\" + "Report.csv") -Append

Хоть и берет имя, но записывает только имя первого объекта тревоги в числе всех обработанных тревог. Например:

5 различных предупреждений:

Operations Manager failed to start a process
Interface Utilization Alert
Veeam VMware: VM customization failed
Veeam VMware: Virtual Machine CPU Usage Analysis
Veeam VMware Collector: VMware connection is unavailable

и это в .csv:

Operations Manager failed to start a process
Operations Manager failed to start a process
Operations Manager failed to start a process
Operations Manager failed to start a process
Operations Manager failed to start a process

Есть ли лучший способ получить вывод данных? Кроме того, я хотел бы иметь не только $Alert.Name, но и $Alert.Name, $Alert.TimeRaised, $ResolutionState.


person T. Schröder    schedule 17.03.2016    source источник
comment
Действительно ли они имеют состояние разрешения 0? Свяжитесь с $Alert | Format-Table Name, ResolutionState -AutoSize.   -  person Ansgar Wiechers    schedule 23.03.2016
comment
Нет, они получили правильное предопределенное значение, например: `switch -wildcard ($Alert.Name) { Operations Manager не удалось запустить процесс { $newState = 255 }`   -  person T. Schröder    schedule 04.04.2016


Ответы (1)


Поместите что-то вроде этого в конце вашего цикла:

if ($Alert.ResolutionState -eq 0) {
  $Alert.Name | Out-File 'C:\path\to\your.txt' -Append
}
person Ansgar Wiechers    schedule 17.03.2016
comment
Спасибо за ответ, но это не то, что я ищу. - person T. Schröder; 23.03.2016