Question [Concours Scripting] Srv_Scan_1A.ps1 (validé)

Plus d'informations
il y a 18 ans 2 mois #1387 par Lemaire Patrice
[Edit] Je corrige mon enorme erreur avant qu'elle soit vue hein ^^ [/Edit]

[code:1]
# Srv_Scan_1A.ps1
################################################################################
# Fonction : Script pour la recherche et le rapport des services en mode
# automatique qui ne tournent pas, sur une machine.
################################################################################
# Description :
# Dans ce Script j'ai pris (pour changer) le parti de mettre toutes
# Les données variables en paramètre. C'est un exemple.
# Je n'y ai pas intégré VOLONTAIREMENT le contrôle des paramètres
# Partant du principe, cette fois, que je leur attribue TOUS une valeur
# Par défaut, et que sinon l'admin qui va lancer ce script sait
# à peut près ce qu'il fait ^^
#
# La démarche est donc la suivante
#
# 1) Quels sont les Services de la machine \"A\" (. ?) qui sont
# en mode de démarrage \"B\" (Auto ?) mais qui malgré tout
# sont dans un état \"C\" (Stopped ?) !!
#
# 2) On a quand même une liste \"B\" (tableau) d'exclusions, puisque
# malgré tout un service peut être en mode \"B\" et pourtant de façons
# naturelle passer dans l'état \"C\" sans que cela soit une anomalie
#
# 3) On ne s'arrête pas en si bon chemin !!! et donc, pour les services
# Sélectionnés, on va chercher dans le Journal d'événnement \"D\",
# dans la liste des \"E\" ièmes derniers événnements du journal,
# a) Le plus récent des messages d'erreur de ce service.
# b) Le plus récent des messages de ce service, sans sélection.
# On vérifiera biensur que ça ne soit pas en fait le même ^^
#
# 4) Pour finir on envoie le Rapport ainsi constitué par le moyen
# Que vous choisirez !! A la mode de chez vous quoi (Write-Error pour l'exemple)
#
##################################################################################
# Version 1A : PLEM le 21/12/2007 -- Premiere version
##################################################################################

#
# Déclaration des parametres (Coucou Janel ^^)
#
param([Int]$Entries = 1000 ,
[String] $EvtLogName = \"Application\" ,
[String] $State = \"Stopped\" ,
[String] $Mode = \"Auto\" ,
[String] $Computer = \".\" ,
[String] $Rapport = \"\" ,
[String[]] $Exclude = (\"Centre de sécurité\",\"SrvNam2\"«»)
)

#
# Déclaration des Objets
#

# Le Log choisi sur la machine indiquée
$EvtLog = New-Object System.Diagnostics.EventLog $EvtLogName , $Computer

#
# Début de traitement
#

# On charge l'entête du rapport
$Rapport += \"`n `n=====================================================================\"
$Rapport += \"`n| Rapport des Services à l'état : $State , en mode : $Mode \"
$Rapport += \"`n=====================================================================`n `n\"

# Puis on lance la recherche des Services visés
$SrvLst = Get-WmiObject -class Win32_Service -ComputerName $Computer -Filter \"State=`'$State`'\" `
| Where-Object {$_.StartMode -eq $Mode}

# Enfin on boucle sur le traitement de ceux concernés que l'on trouve
foreach ($Srv in $SrvLst)
{

# On extrait le nom du service (Displayname, soit celui de la premiere colonne dans la gestion de l ordinateur)
$SrvNom = $Srv.DisplayName

# Si on est dans le tableau des Exclusions on ne renvoie pas d'info.
# Il est sans doute NORMAL que certains services ne soient pas toujours actifs
if ($Exclude -contains $SrvNom) {continue}

# Sinon on va chercher les infos pour remplir le rapport
$Rapport += \" <_-_> Service : $SrvNom <_-_>`n `n\"

# En premier le message d'erreur le plus récent dont la source correspond
# Dans le Journal passé en parametre
$EvtErr = $EvtLog.Entries `
| Where-Object {$_.Source -eq $SrvNom} `
| Where-Object {$_.EntryType -eq \"Error\"} `
| Sort-Object -Property @{Expression={$_.Index};Ascending=$FALSE} `
| Select-Object -First 1

# On vérifie quand meme que l'on a trouvé quelque chose de cohérent ou non
if ($EvtErr -is [System.Diagnostics.EventLogEntry])
{
# Si oui on poursuit la constitution du rapport
$Rapport += \"`tJournal : <$EvtLogName> ,Type : <\" + $EvtErr.EntryType + \"> ,Survenu le : \" + $EvtErr.TimeGenerated + \"`n\"
$Rapport += \"`tErreur : `n`t`t\" + $EvtErr.Message + \"`n `n\"
}
else
{
# Sinon on se le met de coté explicitement pour la suite
$EvtErr = $null
}

# Puis on cherche le plus récent des messages dont la source correspond sans distinction de type
$EvtMsg = $EvtLog.Entries `
| Where-Object {$_.Source -eq $SrvNom} `
| Sort-Object -Property @{Expression={$_.Index};Ascending=$FALSE} `
| Select-Object -First 1

# On vérifie à nouveau la cohérence bien sur
if ($EvtMsg -is [System.Diagnostics.EventLogEntry])
{
# On vérifie AUSSI que ca ne soit pas le même Message que le précedent, avant de l'ajouter au rapport
if ($EvtMsg.Index -ne $EvtErr.Index)
{
$Rapport += \"`tJournal : <$EvtLogName> ,Type : <\" + $EvtMsg.EntryType + \"> ,Survenu le : \" + $EvtMsg.TimeGenerated + \"`n\"
$Rapport += \"`tMessage : `n`t`t\" + $EvtMsg.Message + \"`n `n\"
}
}
else
{
# Si on ne trouve pas de Message on le mémorise de nouveau
$EvtMsg = $null
}

# Si au final on n'a rien trouvé, on le rapporte
if ($EvtErr -eq $null)
{
if ($EvtMsg -eq $null)
{
$Rapport += \"`tAucun Evennement trouvé dans le journal $EvtLogName `n `n\"
}
else
{
$Rapport += \"`n\"
}
}

# Et on va traiter le Service Suivant...
}

$Rapport += \"`n `n `n\"

# Au final on envoie le Rapport
# Ici avec un Write-Quelquechose
# Mais on pourrait aussi bien, si on \"Automatise/Systématise\" ce script sur une machine,
# L'envoyer à l'aide d'un quelconque Script d'envoi de Mail,
# Avec $Rapport en contenu du message, par exemple, libre à vous

Write-Error $Rapport

[/code:1]

Message édité par: Spirit, à: 21/12/07 18:02<br><br>Message édité par: robin, à: 4/01/08 13:41

Connexion ou Créer un compte pour participer à la conversation.

Plus d'informations
il y a 18 ans 2 mois #1405 par Robin Lemesle
Ce script est très intéressant. 3 points de plus pour toi.<br><br>Message édité par: robin, à: 4/01/08 13:42

Robin MVP PowerShell

Connexion ou Créer un compte pour participer à la conversation.

Temps de génération de la page : 0.060 secondes
Propulsé par Kunena