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: