Ce script PowerShell est conçu pour se connecter à une base de données SQL, extraire des données, les comparer avec des données antérieures, et envoyer un email avec les modifications trouvées en pièce jointe. Voici une analyse détaillée de chaque section du script :
Configuration des Variables
$File1="C:\SQLData.csv"
$File2="C:\SQLData.old"
$Result="c:\result.txt"
$Database = "XXXXXXX"
$Server = " "
$SMTPServer = "smtp"
- Description : Cette section configure les chemins des fichiers CSV pour les données actuelles et antérieures, le fichier de résultats, le nom de la base de données, le nom du serveur SQL, et le nom du serveur SMTP pour l’envoi d’emails.
Nettoyage des Fichiers Existants et Renommage
remove-item $File2
remove-item $Result
Rename-Item $File1 $File2
- Description : Le script commence par supprimer les fichiers
$File2
(données antérieures) et$Result
(résultat de la comparaison), puis renomme le fichier$File1
(données actuelles) en$File2
pour le considérer comme les données antérieures lors de la prochaine exécution.
Connexion à SQL et Extraction des Données
$SqlQuery = "SELECT filename, file_description FROM dbo.item_table"
$SqlConnection = New-Object System.Data.SqlClient.SqlConnection
$SqlConnection.ConnectionString = "Data Source=$Server;Initial Catalog=$Database;User Id=XXXXXX;Password=XXXXXXX;"
$SqlCmd = New-Object System.Data.SqlClient.SqlCommand
$SqlCmd.CommandText = $SqlQuery
$SqlCmd.Connection = $SqlConnection
$SqlAdapter = New-Object System.Data.SqlClient.SqlDataAdapter
$SqlAdapter.SelectCommand = $SqlCmd
$DataSet = New-Object System.Data.DataSet
$nRecs = $SqlAdapter.Fill($DataSet)
$nRecs | Out-Null
- Description : Cette partie configure une requête SQL pour sélectionner des colonnes spécifiques d’une table, établit une connexion à la base de données avec une chaîne de connexion, et utilise un
SqlDataAdapter
pour remplir unDataSet
avec les résultats de la requête. Le nombre de lignes affectées est stocké dans$nRecs
et ensuite redirigé versOut-Null
pour éviter qu’il soit affiché.
Exportation des Données vers un Fichier CSV et Comparaison
$objTable = $DataSet.Tables[0]
$objTable | Export-CSV $File1
Compare-Object $(Get-Content($File1)) $(Get-Content($File2)) > $Result
- Description : Le script extrait la première table du
DataSet
et l’exporte vers un fichier CSV$File1
. Ensuite, il utiliseCompare-Object
pour comparer le contenu des fichiers CSV actuel et antérieur, et redirige la sortie vers le fichier$Result
.
Envoi d’un Email avec les Résultats de la Comparaison
$Mailer = new-object Net.Mail.SMTPclient($SMTPServer)
$From =
$To =
$Subject = "Modification"
$Body = "Bonjour, vous trouverez en pièce jointe les modifications apportées"
$Msg = new-object Net.Mail.MailMessage($From,$To,$Subject,$Body)
$Msg.IsBodyHTML = $False
$Attachment = new-object Net.Mail.Attachment($Result)
$Msg.attachments.add($Attachment)
$Mailer.send($Msg)
- Description : Cette section configure un objet
SMTPclient
avec le serveur SMTP, définit les détails de l’email (expéditeur, destinataires, sujet, corps), configure le message pour ne pas interpréter le corps comme du HTML, attache le fichier de résultats à l’email, et envoie l’email via le serveur SMTP configuré.
Points à Noter
- Le script utilise des informations de connexion à la base de données (
User Id
etPassword
) qui devraient être sécurisées. Il est recommandé d’utiliser des méthodes plus sécurisées pour stocker et récupérer ces informations, comme les services de secrets ou les variables d’environnement. - Le nom du serveur SQL (
$Server
) est vide et doit être rempli avec le nom du serveur cible. - Le script suppose que le serveur SMTP n’exige aucune authentification pour l’envoi d’emails. Si une authentification est nécessaire, le script doit être modifié pour inclure les informations d’identification appropriées.
- Le script utilise une encodage particulier pour les caractères spéciaux dans le corps de l’email (
è
au lieu deè
, etc.). Cela pourrait être dû à un problème d’encodage lors de la création du script, et il est préférable de corriger ces caractères pour une meilleure lisibilité.
Ce script est un exemple de workflow d’extraction de données, de comparaison, et de notification par email, automatisant le processus de surveillance des modifications dans une base de données SQL.