21 déc. 2011

[snippet] Recevoir par mail l'état du planificateur de tâche en Powershell

Il est souvent utile, dans la gestion d'un parc informatique, de repérer une tâche planifiée qui ne s'est pas bien déroulée. Plutôt que d'aller vérifier l'état du planificateur de tâche de Windows Server tous les jours, un script Powershell peut faire une alerte mail !

L'outil schtasks permettra de récupérer en ligne de commande, l'état complet du planificateur de tâche. Le script Powershell va mettre en forme les résultats, déterminer si une tâche est en erreur, et envoyer un e-mail, qui sera marqué important si une tâche est en erreur.

Voici le script :
schtasks.exe /query /fo:csv /v > tmp.csv
$taches = import-csv tmp.csv -Delimiter ","

$all = ""
$allOK = $true
$taches | foreach-object {
    if($_."Statut de la tâche planifiée" -eq "Activée") {
        if($_."Dernier résultat" -ne "0") {
            $allOK = $false
        }
        $all += $("`r`n0x" + $_."Dernier résultat" + " " + $_."Nom de la tâche" +" (Etat:" + $_."État" + ", " + $_."Heure de la dernière exécution"+ ")")
    } else {
        $all += $("`r`n0x" + $_."Dernier résultat" + " " + $_."Nom de la tâche" +" (Désactivée)")
    }
}

$objet = "Tâches planifiées sur $(Get-Content env:\computername)"
$serveur = "192.168.1.253"
$destinataire = "cedric@domaine.com"
$expediteur = "Opérateur de sauvegardes >sauvegarde@domaine.com>"
$client = new-object System.Net.Mail.SmtpClient $serveur
$client.Credentials = New-Object System.Net.NetworkCredential("sauvegarde@domaine.com", "mdp")
$message = new-object System.Net.Mail.MailMessage $expediteur, $destinataire, $objet, $all
if($allOK -eq $false) { $message.Priority = "High" }
$client.Send($message) 

Puis de créer une tâche planifiée sur le serveur, pour vérifier l'état des tâches.

Ce qui donnera pour résultat :

Exemple de mail reçu