SCOM et alertes WMI: Script de redémarrage du service wmi et de ses dépendances

par | Déc 15, 2013 | Supervision (SCOM, NAGIOS) | 0 commentaires

 

Le script suivant récupère les alertes ouvertes pour une machine, qui correspondent a des erreurs de requetage wmi. Si il en trouve au moins une dont le repeatcount est supérieur a une valeur donnée en variable, il redémarre le service wmi et ses dépendances et clos les alertes correspondantes.

   1:  

   2: $scomms="scom2k12sp1srv1"

   3: $targetcomputer="scom2k12sp1dc1"

   4: $repeatcountthreshold="1"

   5: $wmi="WinMgmt"

   6:  

   7: $scomcred=Get-Credential -Credential "scom2k12sp1maq1\administrator"

   8: $arrwmialerts=@(“Operations Manager failed to run a WMI query","Workflow Initialization: Failed to start a workflow that queries WMI for performance data","Workflow Initialization: Failed to start a workflow that queries WMI for WMI events","Operations Manager failed to run a WMI query for WMI events",

   9: "Operations Manager failed to run a performance data WMI query","Workflow Initialization: Failed to start a workflow that queries WMI","Script Based Test Failed to Complete")

  10:  

  11: Import-Module operationsmanager

  12:  

  13: New-SCOMManagementGroupConnection -ComputerName $scomms -Credential $scomcred

  14:  

  15: $arrcomputernewalertnames=Get-SCOMAlert | Where-Object {$_.Resolutionstate -eq "0" -and $_.NetbiosComputerName -eq $targetcomputer -and $_.RepeatCount -gt $repeatcountthreshold -and $_.IsMonitorAlert -eq $false } | Select-Object -Property name -ExpandProperty name

  16: $arrcomputernewalerts=Get-SCOMAlert | Where-Object {$_.Resolutionstate -eq "0" -and $_.NetbiosComputerName -eq $targetcomputer -and $_.RepeatCount -gt $repeatcountthreshold -and $_.IsMonitorAlert -eq $false }

  17:  

  18:  

  19:  

  20: $matchingalerts=0

  21: foreach ($wmialert in $arrwmialerts)

  22: {

  23:   if ($arrcomputernewalertnames -contains $wmialert)

  24:     {

  25:     Write-Host -ForegroundColor Red -BackgroundColor White "L'alerte "$wmialert.ToUpper()" a été répétée plus de $repeatcountthreshold fois sur $targetcomputer"

  26:     Write-Host -ForegroundColor Yellow "Fermeture de l'alerte "$wmialert.ToUpper()" avant redemarrage du service $wmi et de ses dependances"

  27:     $matchingalerts= ($matchingalerts + 1)

  28:     $arrcomputernewalerts | Where-Object {$_.Name -like "$wmialert*"} | foreach {Set-SCOMAlert -ResolutionState 255 -Alert $_ }

  29:     }

  30: }

  31:  

  32:  

  33: ###FUNCTIONS###

  34: Function Restart-Wmi ($targetcomputer)

  35: {

  36: Invoke-Command -ComputerName $targetcomputer -Credential $scomcred -ScriptBlock {

  37: $winmgmt=Get-Service -Name Winmgmt

  38: $winmgmtrundep=$winmgmt.DependentServices | Where-Object {$_.Status -eq "Running"}

  39: Stop-Service -Name Winmgmt -Force -ErrorAction SilentlyContinue

  40: Start-Sleep -Seconds 5

  41: Start-Service -Name Winmgmt -ErrorAction silentlycontinue

  42: Start-Sleep -Seconds 5

  43:  

  44: foreach ($dep in $winmgmtrundep) 

  45:     {

  46:     if (Get-WmiObject win32_service | Where-Object {$_.Name -eq $dep.Name -AND $_.state -ne "running" -AND $_.startmode -eq "Auto"}) 

  47:         {

  48:         write-host -ForegroundColor Green "demarrage de la dependance "$dep.Name.ToUpper()""

  49:         Start-Service -Name $dep.Name -erroraction SilentlyContinue -ErrorVariable ("start_"+$dep.Name+"_error").ToString()

  50:         }

  51:     }

  52:  

  53: }

  54: }

  55:  

  56:  

  57: Function NewEventSource

  58: {

  59:     if(!(Test-Path 'HKLM:\SYSTEM\CurrentControlSet\services\eventlog\Operations Manager\RestartWMIScript'))

  60:     {

  61:     New-EventLog -LogName "Operations Manager" -Source RestartWMIScript

  62:     }

  63: }

  64: ###FUNCTIONS###

  65:  

  66:  

  67:  

  68:  

  69:  

  70:  

  71: if ($matchingalerts -gt 0)

  72: {

  73: write-host -ForegroundColor Yellow "Redemarrage du service WinMgmt et de ses dependances"

  74: Restart-Wmi $targetcomputer

  75: }

  76: else

  77: {

  78: write-host -ForegroundColor Green "Pas d'alertes correspondantes trouvées"

  79: Write-Host -ForegroundColor Green "Pas de redemarrage du service WinMgmt et de ses dependances"

  80: exit

  81: }

  82:  

  83:  

  84:  

  85:  

  86:  

  87: ###VERIFICATION ET LOG D'ERREURS

  88:  

  89:  

  90: Invoke-Command -ComputerName $targetcomputer -Credential $scomcred -ScriptBlock {

  91: param($targetcomputer)

  92: $wmi=Get-Service -Name WinMgmt -ComputerName $targetcomputer

  93: if ($wmi.Status -ne "Running")

  94: {

  95: $function:NewEventSource

  96: Write-EventLog -LogName 'Operations Manager' -Source RestartWMIScript -EntryType Error -EventId 1002 -Message "erreur de demarrage du service winmgmt"

  97: }

  98:  

  99: } -Argumentlist $targetcomputer

 100:  

 101: ###VERIFICATION ET LOG D'ERREURS

 102:  

 103:  

 104:  

0 commentaires

Soumettre un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *