Le blog technique

Toutes les astuces #tech des collaborateurs de PI Services.

#openblogPI

Retrouvez les articles à la une

SCOM 2012 – Lister toutes les alertes provenant des serveurs d’un groupe

Selon le mode de fonctionnement de votre service informatique, il est possible que vous n’ayez pas une équipe de supervision dédiée mais plutôt que cette tâche incombe à chaque équipe pour son périmètre de serveurs donné.

Si en plus vous utilisez un Resolution State différent pour attribuer les alertes à chaque équipe, l’idée peut vite vous venir de scripter cette tâche !

A priori, rien de bien compliqué.

Commençons par récupérer le groupe :

$group = Get-SCOMGroup –Displayname “Nom du groupe”

Puis les instances présentes dans ce groupe. Cette fois-ci, pas de cmdlet natif, il faut utiliser la méthode GetRelatedMonitoringObjects du groupe :

$groupinstances = $group.GetRelatedMonitoringObjects(‘Recursive’)

Et enfin les alertes non attribuées (Resolution State 0) provenant de ces instances :

$alerts = Get-SCOMAlert -instance $groupinstances -ResolutionState 0

Hélas, si le groupe visé est un minimum conséquent, on obtient l’erreur suivante :

The incoming tabular data stream (TDS) remote procedure call (RPC) protocol stream is incorrect. Too many parameters were provided in this RPC request. The maximum is 2100.

Cette erreur provient directement de SQL et n’est pas propre à SCOM (cf. https://blogs.msdn.microsoft.com/emeadaxsupport/2009/09/01/how-to-fix-sql-error-too-many-parameters-were-provided-in-this-rpc-request/ )

De plus, le cmdlet Get-SCOMAlert est très lent à exécuter et il n’est donc pas envisageable de l’utiliser dans un script qui aurait vocation à s’exécuter régulièrement.

Heureusement, une autre méthode de $group existe :

$alerts = $group.GetMonitoringAlerts([Microsoft.EnterpriseManagement.Common.TraversalDepth]::Recursive)

De cette façon, on n’a même plus besoin de récupérer les instances du groupe, on prend les alertes directement… et cette méthode est particulièrement véloce !

Attention toutefois, elle récupère toutes les alertes, y compris les alertes déjà attribuées ou déjà fermées. Il est donc nécessaire de les filtrer dans la dernière étape, celle de l’affectation de l’alerte à la bonne équipe à l’aide d’un ResolutionState :

$alerts | where resolutionstate -eq 0 | Set-SCOMAlert -ResolutionState xxx

On résume ? La solution n’était pas si évidente, mais au final 3 lignes suffisent :

$group = Get-SCOMGroup –Displayname “Nom du groupe”

$alerts = $group.GetMonitoringAlerts([Microsoft.EnterpriseManagement.Common.TraversalDepth]::Recursive)

$alerts | where resolutionstate -eq 0 | Set-SCOMAlert -ResolutionState xxx

A vous maintenant de les intégrer à vos scripts en fonction de vos besoins !

HPOneView – Script Powershell

Le script ci-dessous utilise le module powershell pour HP OneView afin de requêter des alertes sur les appliances HP OneView avec la possibilité de changer leur état en Cleared.

Pour rappel, HP OneView est l’outil de management et de centralisation de la configuration des des systèmes convergés HP. Il utilise des appliances dédiés a la gestion des materiels.

Au passage, Un management pack HP OneView pour SCOM est fourni afin de superviser les appliances et les materiels gérés.

En surcouche des API REST fourni par HP, il existe un projet d’API pour Powershell et Python permettant de manipuler plus facilement les fonctionnalités de l’interface OneView.

Le site pour l’API Powershell est disponible via https://github.com/HewlettPackard/POSH-HPOneView

Le script est un exemple de connexion et de récupération multi-critère.

 

############################################################################## # SCRIPT DE RECUPERATION DES ALERTES D'UNE APPLIANCE HPONEVIEW ET MISE EN ETAT CLEARED # author: cjourdan # PARAMETRES: # $ApplianceName: Nom de l'appliance # $RessourceName: Nom de la ressource (Server,Enclosure ...). # $DomainName: Domaine AD. # $AlertSeverity: Critical, Warning, OK, Unknown, Disabled # $AlertState: Active, Locked, Cleared, Pending, Running, Completed, Interrupted, Error, Warning, Terminated, Killed. # $DescInclude: Chaine de caractère dans la champ Description a inclure dans la recherche. # $DescExclude: Chaine de caractère dans la champ Description a exclure de la recherche. # $DayOffset = Recuperer les alertes plus recente que J-DayOffset. # Apres Recuperation des alertes, le script demande validation pour mettre les alertes en état Cleared Param( [Parameter(Mandatory=$false)] $ApplianceName = "MyAppliance", [Parameter(Mandatory=$false)] # Server,Enclosure ... $RessourceName = "MyResource", [Parameter(Mandatory=$false)] $DomainName = "MyDomain", [Parameter(Mandatory=$false)] $AlertSeverity = "Critical", [Parameter(Mandatory=$false)] $AlertState = "Cleared", $DescInclude = "*", $DescExclude = "azerty", $DayOffset = 2 ) $user = Read-Host -Prompt "Enter MyDomain Credential without Domain" $passwd = Read-Host -Prompt "Password" -AsSecureString if (-not (get-module HPOneview.200)) { Import-Module HPOneView.200 } # Connexion a l'appliance OneView if (-not($global:ConnectedSessions)) { Connect-HPOVMgmt -Hostname $ApplianceName -UserName $user -Password $passwd -AuthLoginDomain $DomainName } write-host -BackgroundColor White -ForegroundColor Blue "APPLIANCE ONEVIEW: $ApplianceName"`n # NB: Preciser au minimum un filtre de recherche avant le '|' afin de reduire le temps de recuperation des alertes Try { $Alerts = Get-HPOVAlert -ApplianceConnection $ApplianceName -Severity $AlertSeverity | Where-Object {$_.AlertState -eq $AlertState ` -AND $_.associatedresource -like "*$RessourceName*" ` -AND $_.description -like "*$DescInclude*" ` -AND $_.description -notlike "*$DescExclude*"` -AND $([datetime]$_.created) -gt $(get-date).AddDays(-$DayOffset) } $FormAlerts = foreach ($alert in $Alerts) { Write-output "DESCRIPTION: "$alert.description"" ; Write-Output "SEVERITY: "$alert.severity"" ; Write-Output "STATE: "$alert.alertState"" ; Write-Output "CREATED: "(get-date -format G $alert.Created)"" ; Write-Output "CLEARED: "(get-date -format G $alert.clearedtime)"" ; Write-Output "RESSOURCE_NAME: "$alert.associatedresource.resourcename"" ; Write-Output "APPLIANCE: "$alert.ApplianceConnection.Name"" ; Write-Output "" ; Write-Output "*******************" ; Write-Output "" } write-host -BackgroundColor White -ForegroundColor Blue "CRITERES DE RECHERCHE: Resource: $RessourceName / Severity: $AlertSeverity / Status: $AlertState / a inclure: $DescInclude / a exclure: $DescExclude / Plus recentes que: J-$DayOffset"`n $count=$Alerts | Measure-Object | select count -ExpandProperty count write-host -BackgroundColor White -ForegroundColor Blue "NOMBRE D ALERTES: $count" `n $FormAlerts } Catch { Write-Error -ErrorRecord $_ -ErrorAction Stop } $answer = Read-Host -Prompt "VOULEZ VOUS MODIFIER L'ETAT DES CES ALERTES EN ETAT 'CLEARED' ?: Y/N" switch($answer) { "Y" {"MISE EN ETAT CLEARED"} "N" {"AUCUNE ACTION" ; exit} default {"MAUVAISE REPONSE - AUCUNE ACTION" ; exit} } # Clear Alerts Try { $updatedAlert = $Alerts | set-HPOVAlert -Cleared } Catch { Write-Error -ErrorRecord $_ -ErrorAction Stop } $updatedAlert Write-Host -ForegroundColor Green "MISE EN ETAT CLEARED TERMINEE SANS ERREUR !"

Exchange Hybride & Publication KEMP – Erreur lors des migrations

Contexte

Dans une architecture Exchange 2013 Hybride où les publications web sont faites par des boitiers KEMP vous ne pouvez pas faire de migration.

En effet vous obtenez l’erreur suivante The connection to the server ‘Exchange Server’ could not be completed.

01

Explications et solution

La première chose à valider est l’activation du proxy MRS sur les serveurs Exchange.

Pour cela depuis le centre d’administration Exchange, allez dans Serveurs puis Répertoires virtuels et vérifiez que sur l’ensemble des répertoires EWS l’option Activer le point de terminaison du proxy MRS est cochée.

2016-09-15_145522

2016-09-15_145247

Si c’est bien le cas, le problème peut venir de la configuration de la publication des services web d’Exchange sur le KEMP.

Depuis l’interface d’administration KEMP, allez dans System Configuration > Miscellaneous Options > L7 Configuration.

Modifiez la valeur du paramètre 100-Continue Handling pour RFC-7231 Compliant.

03

La modification de cette valeur va permettre au boitier KEMP de ne pas rejeter la demande de l’assistant de migration.

En essayant à nouveau de faire une migration, l’assistant passera à l’étape suivante.