Envoyer des emails en utilisant PowerShell avec de nombreux exemples

Share this post:

La possibilité d’envoyer des emails en utilisant PowerShell est une grande fonctionnalité et peut nous aider énormément si elle est mise en œuvre de la bonne façon. Je vais donc vous montrer de nombreux exemples de la façon dont vous pouvez envoyer des courriels en utilisant PowerShell et comment vous pouvez l’implémenter davantage dans vos routines informatiques quotidiennes.

Pour envoyer des courriels en utilisant PowerShell, nous allons utiliser Send-MailMessage PowerShell CmdLet et nous avons besoin de quelques prérequis avant de commencer à l’utiliser que je vais présenter ici :

  • Premièrement, nous avons besoin d’un serveur SMTP qui fournira un service de transmission de nos courriels aux destinataires.
  • Deuxièmement, nous obtiendrons les informations d’identification SMTP (nom d’utilisateur et mot de passe) de notre fournisseur de serveur SMTP afin de nous authentifier auprès du service lors de la transmission des emails.
  • Enfin, après avoir éclairci le fournisseur de serveur SMTP et les informations d’identification, nous pouvons commencer à utiliser Send-MailMessage PowerShell CmdLet avec plusieurs exemples que j’ai préparés pour vous.

Plongeons-nous dans plusieurs exemples impressionnants afin que nous puissions obtenir l’aspect et la sensation des capacités d’envoi d’e-mails en utilisant PowerShell.

Table des matières

Envoyer un email en utilisant PowerShell – Exemple facile

Comme nous l’avons déjà conclu PowerShell Send-MailMessage CmdLet nous aidera à envoyer un email à partir de PowerShell et voici un exemple très simple :

Send-MailMessage -To "recipient’s email address" -From "sender’s email address" -Subject "Your message subject" -Body "Message text!" -Credential (Get-Credential) -SmtpServer "SMTP server" -Port 587

IMPORTANT : Les valeurs de tous les paramètres, à l’exception du Port, doivent être remplacées par les valeurs réelles applicables à votre cas pour que cette ligne de code fonctionne.

Dans cet exemple simple, nous avons utilisé seulement quelques paramètres nécessaires de Send-MailMessage PowerShell CmdLet pour envoyer un simple email au destinataire:

  • -La valeur du paramètre -To est l’adresse email du destinataire
  • -La valeur du paramètre -From est l’adresse email de l’expéditeur
  • -La valeur du paramètre -Subject est le texte du sujet de l’email
  • La valeur du paramètre -Body est le contenu de l’email. Il s’agit d’un simple contenu textuel et nous verrons plus tard comment nous pouvons envoyer du contenu HTML dans le corps du texte de l’email.
  • -Le paramètre -Credential est le nom d’utilisateur du serveur SMTP et les informations d’identification du mot de passe. Veuillez regarder les sous-thèmes suivants dans cet article où j’ai expliqué les façons de passer les informations d’identification. C’est très important donc faites attention à cela.
  • Valeur du paramètre -SmtpServer est l’adresse du serveur SMTP.
  • Valeur du paramètre -Port est le numéro de port que le SMTP écoute pour les messages électroniques.

NOTE : Si vous pour le paramètre -From utilisez une adresse électronique d’expéditeur qui n’est pas enregistrée comme expéditeur au serveur SMTP, vous pourriez recevoir un courriel du support du serveur SMTP que vous essayez d’envoyer des courriels à partir d’une adresse électronique d’expéditeur non enregistrée. Vous devez donc utiliser soit une adresse e-mail enregistrée, soit enregistrer une adresse e-mail d’expéditeur supplémentaire.

Voici l’e-mail que j’ai reçu en utilisant mon adresse de serveur SMTP et mes informations d’identification. Comme vous pouvez le voir, nous avons un exemple d’envoi d’un email avec pièce jointe et nous voyons le texte du sujet et une partie du corps de l’email dans la boîte de réception de Gmail.

Message e-mail dans la boîte de réception Gmail envoyé à l’aide du script PowerShell

Dans le corps de l’e-mail, nous pouvons voir le contenu du message e-mail envoyé à l’aide de PowerShell. Voici un exemple d’envoi d’un email à l’aide de PowerShell avec un texte Sujet, via le serveur SMTP MailJet, le corps du texte est juste du texte brut et avec une pièce jointe à l’email.

Message email avec texte brut et pièce jointe

Il existe de nombreux autres paramètres de Send-.MailMessage CmdLet que nous verrons dans les exemples suivants un peu plus loin dans cet article.

Mais avant de plonger dans plus d’exemples et de nuances de l’envoi d’emails à l’aide de PowerShell, clarifions les prérequis nécessaires à l’envoi des emails et ce sont le serveur SMTP et les informations d’authentification du serveur SMTP.

Quel serveur SMTP utiliser et comment obtenir un serveur SMTP

Maintenant, vous vous demandez probablement, attendez une minute, je veux envoyer un email en utilisant PowerShell et pourquoi nous parlons de serveur SMTP.

Eh bien, vous souvenez-vous du bon vieux temps où nous envoyions des messages dans des enveloppes ? Remettiez-vous vos enveloppes personnellement au destinataire ? Bien sûr que non. Il y a une forte probabilité, au moins pour dire, que vous avez utilisé certains prestataires comme la Poste pour le faire à votre place.

Donc, le serveur SMTP est notre prestataire qui va envoyer les emails que nous écrivons dans PowerShell et les envoyer aux destinataires pour nous.

INFO : SMTP est l’abréviation de (Simple Mail Transfer Protocol) et c’est un « langage » convenu ou un protocole de communication pour les applications sur les serveurs pour transmettre des emails.

Si vous vous demandez quel serveur SMTP utiliser, veuillez faire vos recherches car il y a beaucoup de sociétés sur internet qui fournissent un tel service et juste pour en citer quelques-unes : Gmail, Hotmail, Yahoo, etc.

Pour mes exemples et pour tester le code, j’ai utilisé MailJet simplement parce qu’il était facile de créer un compte et de tout configurer.

Lorsque j’ai créé un compte avec MailJet, il est possible de voir les paramètres SMTP :

  • l’adresse du serveur SMTP (« in-v3.mailjet.com »),
  • un port qui est utilisé (587),
  • le nom d’utilisateur, et
  • le mot de passe pour les informations d’identification SMTP.

Tous ces éléments d’information sont importants lorsque nous voulons envoyer des courriels en utilisant le Cmd PowerShell Send-MailMessageLaissez donc vous assurer que vous les avez avant de commencer à utiliser la fonction PowerShell send email.

Comment envoyer un courriel SMTP avec authentification en utilisant PowerShell

Il existe plusieurs façons de fournir les informations d’identification SMTP tout en envoyant des courriels en utilisant PowerShell. Nous allons vous montrer deux approches différentes.

La première est plus simple mais moins sécurisée puisque le mot de passe du serveur SMTP est visible par les autres personnes qui ont accès au code source.

La seconde comporte une étape supplémentaire mais elle est plus sécurisée puisqu’elle nous permet de conserver le mot de passe sécurisé et crypté dans un fichier externe que nous pouvons utiliser lors de la fourniture des informations d’identification SMTP.

Envoi des informations d’identification SMTP avec un mot de passe visible dans le code source (moins sécurisé)

Dans cet exemple, nous fournissons plusieurs paramètres à Send-MailMessage CmdLet mais les paramètres les plus importants pour expliquer cet exemple sont :

  • SmtpServer
  • Credential

NOTE : Pour que cet exemple fonctionne pour vous, veuillez remplacer les valeurs de ces variables par vos propres données : $EmailFrom, $EmailTo, $SMTPserver, $username.

$EmailFrom = "sender’s email address" $EmailTo = "recipient’s email address" $EmailSubject = "Learn PowerShell With Dejan - ImproveScripting.com." $EmailBody = "This email has an attachment error log." $SMTPserver= "SMTP server"$username="your_user_name" $password = "your_password" | ConvertTo-SecureString -AsPlainText -Force$credential = New-Object System.Management.Automation.PSCredential($username, $password)Send-MailMessage -ErrorAction Stop -from "$EmailFrom" -to "$EmailTo" -subject "$EmailSubject" -body "$EmailBody" -SmtpServer "$SMTPserver" -Attachments "$home\Documents\PSlogs\Error_Log.txt" -Priority "Normal" -Credential $credential -Port 587 -UseSsl

La valeur du paramètre SMTPServer a une adresse du serveur SMTP, par exemple, le serveur SMTP de MailJet est « in-v3.mailjet.com ».

Le paramètre Credential enveloppe les informations d’identification de l’utilisateur et du mot de passe du serveur SMTP et doit être passé comme un objet PSCredential. Nous devons porter une attention particulière lors du passage d’un mot de passe à la création d’un objet PSCredential car un mot de passe ne peut pas être du texte brut mais du type de données SecureString. Nous devons donc convertir notre mot de passe en clair en type de données SecureString en utilisant le CmdLet ConvertTo-SecureString.

$password = "your_password" | ConvertTo-SecureString -AsPlainText -Force

Comme déjà mentionné, cette méthode n’est pas trop compliquée mais présente un problème de sécurité puisque nous gardons notre mot de passe du serveur SMTP en clair dans notre code source, ce qui n’est pas la meilleure pratique.

Finalement, voici le résultat et l’email reçu en utilisant cet exemple :

Message électronique

Envoi des informations d’identification SMTP avec un mot de passe caché dans le code source (plus sécurisé)

Dans cet exemple, nous allons fournir les informations d’identification SMTP tout en appelant Send-MailMessage CmdLet mais cette fois-ci, le mot de passe ne sera pas visible. Cependant, cette méthode nécessite une étape supplémentaire de notre part pour fonctionner.

D’abord, nous allons crypter notre mot de passe dans un fichier txt externe juste une fois et utiliser ce fichier pour décrypter et lire notre mot de passe chaque fois que nous avons besoin dans notre code source.

Lorsque nous exécutons ce code, nous serons invités à fournir les informations d’identification du mot de passe du serveur SMTP. En cliquant sur le bouton OK (comme vous pouvez le voir sur la capture d’écran) le mot de passe crypté sera enregistré dans un fichier externe (Dans cet exemple c’est le fichier MailJet.txt).

Read-Host -AsSecureString | ConvertFrom-SecureString | Out-File -FilePath "C:\Users\dekib\Documents\PSCredential\MailJet.txt"
Enregistrer le mot de passe crypté dans un fichier externe.

Maintenant notre mot de passe est crypté et enregistré dans un fichier externe afin que nous puissions l’utiliser lors de l’appel à Send-MailMessage CmdLet.

Voici un exemple qui nous montre comment utiliser le mot de passe crypté dans un fichier txt externe.

NOTE : Pour que cet exemple fonctionne pour vous, veuillez remplacer les valeurs de ces variables par vos propres données : $EmailFrom, $EmailTo, $SMTPserver, $username.

$EmailFrom = "sender’s email address" $EmailTo = "recipient’s email address" $EmailSubject = "Learn PowerShell With Dejan - ImproveScripting.com." $EmailBody = "This email has an attachment error log." $SMTPserver= "SMTP server"$EncryptedPasswordFile = "$home\Documents\PSCredential\MailJet.txt"$username="your_user_name" $password = Get-Content -Path $EncryptedPasswordFile | ConvertTo-SecureString$credential = New-Object System.Management.Automation.PSCredential($username, $password)Send-MailMessage -ErrorAction Stop -from "$EmailFrom" -to "$EmailTo" -subject "$EmailSubject" -body "$EmailBody" -SmtpServer "$SMTPserver" -Attachments "$home\Documents\PSlogs\Error_Log.txt" -Priority "Normal" -Credential $credential -Port 587 -UseSsl

Maintenant que nous avons fait le ménage dans les façons de passer les informations d’identification SMTP au CmdLet Send-MailMessage, nous pouvons nous concentrer sur différents exemples.

Comment envoyer une ou plusieurs pièces jointes avec un courriel en utilisant PowerShell

Parfois, il est très pratique d’accompagner un courriel de quelques pièces jointes qui nous donneront des informations supplémentaires. Bien que, nous ayons déjà utilisé des exemples d’envoi de pièces jointes avec PowerShell, regardons un exemple dédié. Nous utilisons le paramètre -Attachments de la Cmd Send-MailMessageLaissons finir le travail :

NOTE : Pour que cet exemple fonctionne pour vous, veuillez remplacer les valeurs de ces variables par vos propres données : $EmailFrom, $EmailTo, $SMTPserver, $username.

$EmailFrom = "sender’s email address" $EmailTo = "recipient’s email address" $EmailSubject = "Learn PowerShell With Dejan - ImproveScripting.com. (Multiple recipients example)" $EmailBody = "This email has an attachment error log." $SMTPserver= "SMTP server"$EncryptedPasswordFile = "$home\Documents\PSCredential\MailJet.txt"$username="your_user_name" $password = Get-Content -Path $EncryptedPasswordFile | ConvertTo-SecureString$credential = New-Object System.Management.Automation.PSCredential($username, $password)Send-MailMessage -ErrorAction Stop -from "$EmailFrom" -to $EmailTo -subject "$EmailSubject" -body "$EmailBody" -SmtpServer "$SMTPserver" -Attachments "$home\Documents\PSlogs\Error_Log.txt" -Priority "Normal" -Credential $credential -Port 587 -UseSsl

Si nous voulons envoyer plusieurs pièces jointes dans le même courriel, nous pouvons facilement le faire puisque le paramètre -Attachments du CmdLet Send-MailMessage accepte un tableau de chaînes de caractères comme valeurs d’entrée. Cependant, faites attention à la façon dont vous passez le tableau de chaînes de caractères juste pour ne pas être surpris par des résultats inattendus.

C’est la façon correcte de passer deux pièces jointes

$Attachments = "$home\Documents\PSlogs\Error_Log.txt", "$home\Documents\PSReports\Excel_report.xls"

et celle-ci aussi:

$Attachments = @("$home\Documents\PSlogs\Error_Log.txt", "$home\Documents\PSReports\Excel_report.xls")

mais celle-ci est fausse. Faites donc attention à cela.

$Attachments = "$home\Documents\PSlogs\Error_Log.txt, $home\Documents\PSReports\Excel_report.xls"
Email envoyé avec pièce jointe (Error_Log.txt) à l’aide de PowerShell

Comment envoyer un courriel à plusieurs destinataires à l’aide de PowerShell

Si nous voulons envoyer des courriels à l’aide de PowerShell à plusieurs destinataires, alors nous avons la commodité du paramètre -To qui accepte un tableau de chaînes dans le CmdLet Send-MailMessage. Il est important de prêter attention à la façon dont nous ajoutons plusieurs adresses électroniques sous la forme d’un tableau de chaînes de caractères et non d’une seule chaîne de caractères avec des valeurs séparées par des virgules. À la fin de ce sous-thème, j’ai donné plusieurs exemples des bonnes et des mauvaises façons de transmettre des destinataires multiples.

Voici un exemple d’envoi de courriel à plusieurs destinataires à l’aide de PowerShell :

NOTE : Pour que cet exemple fonctionne pour vous, veuillez remplacer les valeurs de ces variables par vos propres données : $EmailFrom, $ToRecipients, $SMTPserver, $username.

$EmailFrom = "sender’s email address" $ToRecipients = "recipient’s email address 1", "recipient’s email address 2", "recipient’s email address 3" $EmailSubject = "Learn PowerShell With Dejan - ImproveScripting.com. (Multiple recipients example)" $EmailBody = "This email has an attachment error log." $SMTPserver= "SMTP server"$EncryptedPasswordFile = "$home\Documents\PSCredential\MailJet.txt"$username="your_user_name" $password = Get-Content -Path $EncryptedPasswordFile | ConvertTo-SecureString$credential = New-Object System.Management.Automation.PSCredential($username, $password)Send-MailMessage -ErrorAction Stop -from "$EmailFrom" -to $ToRecipients -subject "$EmailSubject" -body "$EmailBody" -SmtpServer "$SMTPserver" -Attachments "$home\Documents\PSlogs\Error_Log.txt" -Priority "Normal" -Credential $credential -Port 587 -UseSsl

Voyez la différence entre le passage correct des adresses électroniques des destinataires comme un tableau de chaînes:

$ToRecipients = "recipient’s email address 1", "recipient’s email address 2", "recipient’s email address 3"

et le passage erroné juste comme une seule chaîne (les adresses électroniques sont des valeurs séparées par des virgules mais dans une seule chaîne) au lieu d’un tableau de chaînes.

$ToRecipients = "recipient’s email address 1, recipient’s email address 2, recipient’s email address 3"

En plus de l’envoi de courriels à plusieurs destinataires, nous avons habituellement des fonctionnalités de courriel d’envoi de Cc (Carbon copy) et Bcc (Blind carbon copy) et pour cela, nous utilisons les paramètres -Cc et -Bcc (Send-MailMessage CmdLet) respectivement tout en fournissant les adresses de courriel comme valeurs pour chacun d’eux.

Comment envoyer un email avec un corps HTML en utilisant PowerShell

Nous avons la possibilité d’envoyer nos emails en utilisant PowerShell avec un contenu HTML à l’intérieur du corps de l’email en utilisant Send-MailMessage CmdLet. Pour pouvoir envoyer des courriels en utilisant PowerShell en tant que HTML, nous devons faire deux choses supplémentaires :

  • La valeur du paramètre -body doit être du HTML bien formaté afin que le client de messagerie nous montre un courriel en HTML.
  • Le paramètre de commutation -BodyAsHtml a été passé à Send-MailMessage CmdLet juste pour l’informer que le paramètre -body contient du code HTML.

Voici un exemple d’appel à Send-MailMessage CmdLet qui crée un courriel HTML au lieu d’un texte brut dans le corps du courriel.

NOTE : Pour que cet exemple fonctionne pour vous, veuillez remplacer les valeurs de ces variables par vos propres données : $EmailFrom, $EmailTo, $SMTPserver, $username.

$EmailFrom = "sender’s email address" $EmailTo = "recipient’s email address" $EmailSubject = "Learn PowerShell With Dejan - ImproveScripting.com. HTML Example" $EmailHTMLBody = 'Learn PowerShell With Dejan - ImproveScripting.com'$SMTPserver= "SMTP server"$EncryptedPasswordFile = "$home\Documents\PSCredential\MailJet.txt"$username="your_user_name" $password = Get-Content -Path $EncryptedPasswordFile | ConvertTo-SecureString$credential = New-Object System.Management.Automation.PSCredential($username, $password)Send-MailMessage -ErrorAction Stop -from "$EmailFrom" -to "$EmailTo" -subject "$EmailSubject" -body "$EmailHTMLBody" -BodyAsHtml -SmtpServer "$SMTPserver" -Attachments "$home\Documents\PSlogs\Error_Log.txt" -Priority "Normal" -Credential $credential -Port 587 -UseSsl

Voici le courriel résultant qui a été reçu et comme vous pouvez le voir dans le corps du courriel, nous avons un lien HTML vers ce site Web au lieu d’un simple texte.

Envoyer un courriel en HTML à l’aide de PowerShell

Comment envoyer un courriel à partir de PowerShell en utilisant Gmail ? Email From PowerShell Using Gmail SMTP Server

Peut-être que ma réponse va vous surprendre mais je ne recommande pas d’utiliser le serveur SMTP de Gmail pour envoyer des emails avec PowerShell Send-.MailMessage CmdLet.

La raison étant pour cela le fait que nous devons activer dans la fonctionnalité du compte Gmail : « Activer les apps moins sécurisées pour accéder à Gmail ». Cela diminuera la sécurité de notre compte Gmail et je préfère ne pas le faire surtout qu’il y a beaucoup d’autres options disponibles publiquement.

System.Net.Mail API

L’une des approches alternatives pour envoyer des e-mails à l’aide de PowerShell est d’utiliser les classes .NET dans l’espace de noms System.Net.Mail. Cette approche est antérieure à l’époque où Send-MailMessage CmdLet n’était pas disponible.

Voici un exemple d’appel utilisant System.Net.Mail API:

NOTE : Pour que cet exemple fonctionne pour vous, veuillez remplacer les valeurs de ces variables par vos propres données : $EmailFrom, $EmailTo, $SMTPserver, $username.

$EmailFrom = "sender’s email address”$EmailTo = "recipient’s email address”$EmailSubject = "Learn PowerShell With Dejan - ImproveScripting.com. (System.Net.Mail API Example)”$EmailBody = "This email has as the attachments error log."$SMTPServer = "SMTP server”$SMTPClient = New-Object Net.Mail.SmtpClient($SmtpServer, 587)$SMTPClient.EnableSsl = $true$EncryptedPasswordFile = "$home\Documents\PSCredential\MailJet.txt"$username="your_user_name" $password = Get-Content -Path $EncryptedPasswordFile | ConvertTo-SecureString$SMTPClient.Credentials = New-Object System.Net.NetworkCredential($username, $password);$SMTPClient.Send($EmailFrom, $EmailTo, $EmailSubject, $EmailBody)

Voici l’email reçu dans la boîte de réception après avoir remplacé l’exemple avec les valeurs réelles des paramètres nécessaires :

Sujet du courriel dans la boîte de réception
Email utilisant System.Net.Mail API avec PowerShell

À mon avis, l’utilisation des classes de l’espace de nom .NET de System.Net.Mail est une approche plus naturelle pour les développeurs .NET tandis que l’utilisation de Send-MailMessage CmdLet est une approche plus native de PowerShell. Quoi qu’il en soit, il est bon de se familiariser avec les alternatives et les deux approches sont utiles à avoir dans l’ensemble des compétences de script PowerShell.

Comment écrire son propre CmdLet pour envoyer des courriers électroniques en utilisant PowerShell

J’ai écrit mon propre CmdLet PowerShell qui fournit la fonctionnalité d’envoi de courrier appelée Send-Email CmdLet.

Ce CmdLet appartient au projet PowerShell Efficiency Booster. Ce projet est la bibliothèque de différents CmdLets qui peuvent nous aider, nous les informaticiens, à effectuer nos tâches quotidiennes de manière plus efficace et plus précise.

Le code source de Send-Email CmdLet peut être téléchargé à partir de ce fichier zip, alors n’hésitez pas à le télécharger ou à regarder le code source au bas de cet article.

Send-Email CmdLet fait partie du module Utils et si vous avez téléchargé le code source, il se trouve dans le dossier …\ Documents\WindowsPowerShell\Modules\02utils

Je ne vais pas trop expliquer ce CmdLet puisqu’il s’agit essentiellement d’un wrapper autour de Send-MailMessage CmdLet et qu’il n’est pas spécialement innovant mais il est important d’utiliser les capacités PowerShell d’envoi d’emails comme un mécanisme important dans l’automatisation et l’efficacité.

INFO : Si vous voulez savoir comment installer et configurer les fichiers du projet PowerShell de Efficiency Booster, veuillez lire l’article suivant : Comment installer et configurer PowerShell : CmdLets, Modules, Profils.

Comment utiliser la fonctionnalité d’envoi d’emails dans PowerShell

Je vais vous donner quelques exemples de la façon dont j’ai utilisé les emails combinés à quelques autres fonctionnalités PowerShell pour être plus efficace ou pour avoir une meilleure vue d’ensemble du système à maintenir.

Exemple : Espace libre sur les disques des serveurs

Je voulais avoir un aperçu de l’espace libre sur les disques des serveurs que je maintenais. J’ai donc écrit mon propre CmdLet PowerShell Get-DiskFreeSpace qui vérifiera l’espace libre sur chaque disque de tous les serveurs, de plus ce CmdLet a été programmé pour s’exécuter une fois par semaine et produire un rapport sous forme de feuille Excel qui sera envoyé à mon email afin que je puisse l’examiner et éviter les espaces libres de disque bas.

Cet exemple peut être encore étendu pour être utilisé pour la planification de la capacité et envoyer les données plus loin vers MS SQL Table et combiné avec MS SQL Reporting Service pour obtenir des graphiques avec les tendances de l’utilisation du stockage sur disque pour planifier les mises à niveau et les expansions de stockage à l’avenir.

Je recommande vivement à tous de lire l’article dédié à cette Cmdlet PowerShell « Comment obtenir la taille du disque et l’espace libre du disque en utilisant PowerShell ».

Comment obtenir la taille du disque et l'espace libre du disque en utilisant PowerShell
Comment obtenir la taille du disque et l’espace libre du disque en utilisant PowerShell

Exemple : Journaux d’événements Windows sur les serveurs

Le deuxième exemple a fait partie de ma routine de maintenance mensuelle pour regarder dans tous les journaux d’événements Windows les erreurs qui se produisent sur les serveurs, en particulier en ce qui concerne le système d’exploitation et les applications critiques.

À cette fin, j’ai écrit mon propre CmdLet PowerShell Get-ErrorFromEventLog qui vérifiera les journaux d’événements Windows et recherchera les erreurs sur tous les serveurs. Ce script a été programmé pour s’exécuter une fois par mois avant la maintenance et, en outre, il produira une feuille Excel afin qu’il soit facile de filtrer et de regarder les données. Enfin, un rapport Excel a été envoyé à mon adresse électronique. Ainsi, je peux examiner les erreurs et être prêt à faire les actions nécessaires et éviter les mêmes erreurs à l’avenir.

En ce sens, je gagnerais énormément de temps en ne faisant pas un travail manuel de connexion sur chaque serveur et de vérification manuelle de chaque journal d’événements Windows sur chaque serveur.

Si vous maintenez un environnement avec beaucoup de serveurs, je vous recommande fortement d’adopter cette routine mensuelle et de regarder l’article écrit à ce sujet « Comment obtenir les détails des journaux d’événements Windows en utilisant PowerShell ».

Comment obtenir les détails des journaux d'événements de Windows en utilisant PowerShell Featured
Comment obtenir les détails des journaux d’événements de Windows en utilisant PowerShell

J’espère que ces deux exemples déclencheront vos idées pour mettre en œuvre des possibilités fantastiques en envoyant un e-mail à l’aide de PowerShell combiné à d’autres capacités PowerShell.

Articles utiles de PowerShell sur l’envoi d’email

Voici quelques articles et ressources utiles :

  • Send-MailMessage
  • DE0005 : SmtpClient ne devrait pas être utilisé
  • MailKit
  • System.Net.Mail API
  • SmtpClient
  • Classe NetworkCredential

CmdLet Send-Email – Code source

DISCLAIMER : La fonction Send-Email fait partie du projet PowerShell Efficiency Booster et, à ce titre, utilise d’autres CmdLets qui font partie du même projet. Ainsi, la meilleure option pour vous afin que cette fonction fonctionne sans aucune personnalisation supplémentaire est de télécharger le code source de l’ensemble du projet à partir d’ici.

INFO : Mon meilleur conseil à chaque scripteur PowerShell est d’apprendre à écrire ses propres fonctions avancées et CmdLets PowerShell et j’ai écrit plusieurs articles expliquant cela, alors lisez-les. Comment créer un CmdLet PowerShell personnalisé (étape par étape). Ici, j’explique comment utiliser PowerShell Add-on Function pour être plus rapide dans l’écriture des fonctions PowerShell Comment écrire des fonctions avancées ou des CmdLets avec PowerShell (rapide).

Voici le code source de l’ensemble du CmdLet Send-Email:

NOTE : Pour que cet exemple fonctionne pour vous, veuillez remplacer les valeurs de ces variables par vos propres données : $EmailFrom, $EmailTo, $SMTPserver, $EncryptedPasswordFile, $username.

<#.SYNOPSISSend email..DESCRIPTIONSend email..PARAMETER AttachmentsEmail attachments. File path to file(s) that will be attachments..PARAMETER PriorityEmail priority. Valid values are: Normal, High, and Low..PARAMETER errorlogWrite to Error log or not. Switch parameter. Error log is in PSLogs Folder of My documents..PARAMETER clientOK - O clientBK - B client.PARAMETER solutionFIN - Financial solution HR - Humane Resource solution.EXAMPLESend-Email -Attachments "$home\Documents\PSlogs\Error_Log.txt" -Priority "Normal" -errorlog -client "Test" -solution "Test" -Verbose.NOTESFunctionName : Send-EmailCreated by : Dejan MladenovicDate Coded : 09/23/2020 15:13:00More info : https://improvescripting.com/send-emails-using-powershell-with-many-examples/.LINK Send-MailMessagehttps://improvescripting.com/send-emails-using-powershell-with-many-examples/#>Function Send-Email {param ( ]$Attachments, $Priority = "Normal", $errorlog, $client, $solution)BEGIN { }PROCESS { try { Write-Verbose "Sending email..." if( $client -eq "OK" -and $solution -eq "FIN") { ##REPLACE THIS VALUE!!! $EmailFrom = "your_email" ##REPLACE THIS VALUE!!! $EmailTo = "your_email" $EmailSubject = "Report from Financial solution - OK client." $EmailBody = "This email has as attachments error log and report file from Financial Solution - OK client." ##REPLACE THIS VALUE!!! $SMTPserver= "your_SMTP_server" ##REPLACE THIS VALUE!!! $EncryptedPasswordFile = "$home\Documents\PSCredential\MailJet.txt" ##REPLACE THIS VALUE!!! $username="your_user_name" $password = Get-Content -Path $EncryptedPasswordFile | ConvertTo-SecureString $credential = New-Object System.Management.Automation.PSCredential($username, $password) ##Change this as splatting syntax in Send-MailMessage CmdLet Send-MailMessage -ErrorAction Stop -from "$EmailFrom" -to "$EmailTo" -subject "$EmailSubject" -body "$EmailBody" -SmtpServer "$SMTPserver" -Attachments $Attachments -Priority $Priority -Credential $credential -Port 587 } elseif ( $client -eq "Test" -and $solution -eq "Test" ) { ##REPLACE THIS VALUE!!! $EmailFrom = "your_email" ##REPLACE THIS VALUE!!! $EmailTo = "your_email" $EmailSubject = "Test of Send-Email cmdlet" $EmailBody = "This is test email." ##REPLACE THIS VALUE!!! $SMTPserver= "your_SMTP_server" ##REPLACE THIS VALUE!!! $EncryptedPasswordFile = "$home\Documents\PSCredential\MailJet.txt" ##REPLACE THIS VALUE!!! $username="your_user_name" $password = Get-Content -Path $EncryptedPasswordFile | ConvertTo-SecureString $credential = New-Object System.Management.Automation.PSCredential($username, $password) ##Change this as splatting syntax in Send-MailMessage CmdLet Send-MailMessage -ErrorAction Stop -from "$EmailFrom" -to "$EmailTo" -subject "$EmailSubject" -body "$EmailBody" -SmtpServer "$SMTPserver" -Attachments $Attachments -Priority $Priority -Credential $credential -Port 587 } Write-Verbose "Email sent." } catch { Write-Warning "There was a problem with sending email, check error log. Value of error is: $_" if ( $errorlog ) { $errormsg = $_.ToString() $exception = $_.Exception $stacktrace = $_.ScriptStackTrace $failingline = $_.InvocationInfo.Line $positionmsg = $_.InvocationInfo.PositionMessage $pscommandpath = $_.InvocationInfo.PSCommandPath $failinglinenumber = $_.InvocationInfo.ScriptLineNumber $scriptname = $_.InvocationInfo.ScriptName Write-Verbose "Start writing to Error log." Write-ErrorLog -hostname "Send Email was failing." -errormsg $errormsg -exception $exception -scriptname $scriptname -failinglinenumber $failinglinenumber -failingline $failingline -pscommandpath $pscommandpath -positionmsg $pscommandpath -stacktrace $stacktrace Write-Verbose "Finish writing to Error log." } }}END { }}#Send-Email -Attachments "$home\Documents\PSlogs\Error_Log.txt" -Priority "Normal" -errorlog -client "Test" -solution "Test" -Verbose

.

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *