Jump to content

[Partage] Signature Outlook automatique en Powershell !


Recommended Posts

Hello tout le monde,

Je ne sais pas si c'est l'endroit pour ce genre de sujet, mais ayant enfin terminé et ayant pas mal de difficulté à finaliser mon script afin d’optimiser les signatures Outlook, je vous le partage avec plaisir !
Évidemment, je suis conscient que le script est loin d'être le meilleur du web, qu'il comporte certainement beaucoup d'erreurs et qu'on pourrait aussi l'améliorer ou le rendre plus optimal.

Je vous demande d'être clément avec moi, ça doit être mon 2-3eme script PS avec autant de ligne
Évidemment, si vous avez des améliorations, n'hésitez pas !

Enfin, ce script se base sur les besoins de mon entreprise (6 signatures différentes), mais vous pouvez facilement l'adapter et le simplifié.

Concernant les informations récupérées par l'AD, je n'en ai pas utilisé tant que ça, n'ayant que deux sites, et par facilité pour moi ( :P ), j'ai déclaré dans des variables beaucoup d'informations (comme les sites web, les adresses, le pays, etc). Évidemment, au lieu de ça, vous pouvez supprimer ces lignes et les récupérer via l'AD tout simplement !

 

Je vais encore améliorer un peu le script sur le temps (mais la j'ai envie de me consacrer sur d'autres choses), je le mettrai à jour de temps en temps :) 

Sur ceux, voici le script !

 

 #variables
$pathPictures = ""  #chemin de l'image sur le réseau
$PathSignaturesLine = "" # chemin de la ligne de la signature sur le réseau
$AdrSite = "" # Adresse selon le site sur lequel l'utilisateur appartient
$AdrSite2 = ""
$PaysSite = "" # le pays selon le site sur lequel l'utilisateur appartient
$PaysSite2 = ""
$CompanyName = 'Company' #Nom de la compagnie pour nommer le fichier
$AppData=(Get-Item env:appdata).value # valeur du chemin local vers le dossier appdata
$SigPath = '\Microsoft\Signatures' #dossier ou se trouve la signature Outlook 
$LocalSignaturePath = $AppData+$SigPath  # chemin complet vers la signature Outlook
$SiteWeb = "" #url du site web
$SiteWebB = ""
$SiteWebBLux = ""
$SiteWebBluxB = ""
$SiteUrl = ""
$SiteUrlB = ""
$SiteUrlBLux = ""
$SiteUrlBluxB = ""
$TitlePays = "" #Utiliser pour le pays à côté du titre. Pas propre, à changer ! 
#Get Active Directory information for current user 
$UserName = $env:username 
$Filter = "(&(objectCategory=User)(samAccountName=$UserName))" 
$Searcher = New-Object System.DirectoryServices.DirectorySearcher 
$Searcher.Filter = $Filter 
$ADUserPath = $Searcher.FindOne() 
$ADUser = $ADUserPath.GetDirectoryEntry() 
$ADDisplayName = $ADUser.DisplayName
$ADFirstName = $ADUser.givenName #Prenom
$ADName =  $ADUser.sn #NOM
$ADEmailAddress = $ADUser.mail 
$ADTitle = $ADUser.title 
$ADTelePhoneNumber = $ADUser.TelephoneNumber
$ADMobile = $ADUser.mobile 
$ADDescription = $ADUser.description
$company = $ADUser.company
# Configuration de la signature par défaut pour tout nouveau message 
$MSWord = New-Object -com word.application 
$EmailOptions = $MSWord.EmailOptions 
$EmailSignature = $EmailOptions.EmailSignature 
$EmailSignatureEntries = $EmailSignature.EmailSignatureEntries 
$EmailSignature.NewMessageSignature=$ADDisplayName 
$MSWord.Quit() 
# Configuration de la signature par défaut pour les réponses ou transfert de message 
$MSWord = New-Object -com word.application 
$EmailOptions = $MSWord.EmailOptions 
$EmailSignature = $EmailOptions.EmailSignature 
$EmailSignatureEntries = $EmailSignature.EmailSignatureEntries 
$EmailSignature.ReplyMessageSignature=$ADDisplayName
$MSWord.Quit() 
[ref]$SaveFormat = "microsoft.office.interop.word.WdSaveFormat" -as [type]
$word = New-Object -ComObject word.application
$word.visible = $false
$doc = $word.documents.add()

$selection = $word.selection
$selection.font.color = 0
#selection du logo & attribution des infos (BE, LUX, BELUX, BUSINESS, ...)
switch ($company)
    {
        "SFR" 
            {
               $TitlePays = "Belgium"
               $pathPictures = "\\Server\netlogon\Signature\image002.png"
               $PathSignaturesLine = "\\Server\netlogon\Signature\image001.jpg"
               $AdrSite = "Adresse de la société"
               $PaysSite = "Belgium"
               $SiteWeb = "Texte du Site Web"
                    $SiteUrl = "URL du site web"
               $SiteWebB = "Texte du Site Web 2"
                    $SiteUrlB = "URL du site web 2"
            }
        "SFRL" 
            {
               $TitlePays = "Luxembourg" 
               $pathPictures = "\\Server\netlogon\Signature\image002.png"
               $PathSignaturesLine = "\\Server\netlogon\Signature\image001.jpg"
               $AdrSite = "Adresse de la société"
               $PaysSite = "Luxembourg"
               $SiteWeb = "Texte du Site Web"
                    $SiteUrl = "URL du site web"
               $SiteWebB = "Texte du Site Web 2"
                    $SiteUrlB = "URL du site web 2"
            }
        "SFRBUI"
            {
               $TitlePays = "Belgium"
               
               $pathPictures = "\\Server\netlogon\Signature\image003.png"
               $PathSignaturesLine = "\\Server\netlogon\Signature\image001.jpg"
               $AdrSite = "Adresse de la société"
               $PaysSite = "Belgium"
               $SiteWeb = "Texte du Site Web"
                    $SiteUrl = "URL du site web"
               $SiteWebB = "Texte du Site Web 2"
                    $SiteUrlB = "URL du site web 2"
            }
        "SFRLBUI"
            {
               $TitlePays = "Luxembourg"
               $pathPictures = "\\Server\netlogon\Signature\image003.png"
               $PathSignaturesLine = "\\Server\netlogon\Signature\image001.jpg"
               $AdrSite = "Adresse de la société"
               $PaysSite = "Luxembourg"
               $SiteWeb = "Texte du Site Web"
                    $SiteUrl = "URL du site web"
               $SiteWebB = "Texte du Site Web 2"
                    $SiteUrlB = "URL du site web 2"
            }
  
        "SFRBELUX" 
            {
               $TitlePays = "BeLux"
               $pathPictures = "\Server\netlogon\Signature\image002.png"
               $PathSignaturesLine = "\\Server\netlogon\Signature\image001.jpg"
               $AdrSite = "Adresse de la société"
               $PaysSite = "Belgium"
               $AdrSite2 = "Adresse de la société 2"
               $PaysSite2 = "Luxembourg"
               $SiteWeb = "Texte du Site Web"
                    $SiteUrl = "URL du site web"
               $SiteWebB = "Texte du Site Web 2"
                    $SiteUrlB = "URL du site web 2"
                $SiteWeb = "Texte du Site Web 3"
                    $SiteUrl = "URL du site web 3"
               $SiteWebB = "Texte du Site Web 4"
                    $SiteUrlB = "URL du site web 4"          
            }
        "SFRBELUXBUI" 
            {
               $TitlePays = "BeLux"
               $pathPictures = "\\Server\netlogon\Signature\image003.png"
               $PathSignaturesLine = "\\Server\netlogon\Signature\image001.jpg"
               $AdrSite = "Adresse de la société"
               $PaysSite = "Belgium"
               $AdrSite2 = "Adresse de la société 2"
               $PaysSite2 = "Luxembourg"
               $SiteWeb = "Texte du Site Web"
                    $SiteUrl = "URL du site web"
               $SiteWebB = "Texte du Site Web 2"
                    $SiteUrlB = "URL du site web 2"
                $SiteWeb = "Texte du Site Web 3"
                    $SiteUrl = "URL du site web 3"
               $SiteWebB = "Texte du Site Web 4"
                    $SiteUrlB = "URL du site web 4"
           
            }
    }

#$selection.ParagraphFormat.linespacing = 0
#$selection.style = "0 pt" #"No Spacing"
$selection.paragraphs.spaceafter = 0  # no spacing ne fonctionne pas sur un office en Francais...
#Insertion du prénom suivi du nom en majuscule
$selection.font.Name = "Font du texte"
$selection.font.size = 10
$selection.font.bold = 1
$selection.font.Italic = 0
$selection.typeText("$ADFirstName" + " " + ($ADName.tostring()).ToUpper() )
#$selection.ParagraphFormat.linespacing = 12
#insertion du titre de la fonction
$selection.TypeParagraph()
$selection.font.Name = "Font du texte"
$selection.font.size = 10
$selection.font.color = ("wdColorGray55") #Couleur du texte
$selection.font.Italic = 0
$selection.typeText($ADTitle)
$string5 = (" | ")
$selection.font.color =  ("wdColorRed") #Couleur du texte
If ($string5 -match '|'){$selection.TypeText($Matches[0])}
$selection.font.name = "Font du texte"
$selection.TypeText($string5 -replace '|')
$selection.font.color = ("wdColorGray55") #Couleur du texte
$selection.font.bold = 0
$selection.font.size = 10
$selection.typeText($TitlePays)
$selection.TypeParagraph()
#insertion du téléphone
if ($ADTelePhoneNumber.ToString() -ne "")
{
    
    $selection.TypeParagraph()
    $selection.font.Name = "Font du texte"
    $selection.font.size = 10
    $selection.font.color = 0
    $selection.font.bold = 0
    $selection.font.Italic = 0
    $selection.typeText("Office : " + $ADTelePhoneNumber)
}
#insertion du Mobile
if ($ADMobile.ToString() -ne "")
{
    $selection.TypeParagraph()
    $selection.font.Name = "Font du texte"
    $selection.font.size = 10
    $selection.font.bold = 0
    $selection.font.Italic = 0
    $selection.typeText("Mobile : " + $ADMobile)
}
#insertion du mail
if ($ADEmailAddress.ToString() -ne "")
{
    $selection.TypeParagraph()
    $selection.font.Name = "Font du texte"
    $selection.font.size = 10
    $selection.font.bold = 0
    $selection.font.Italic = 0
    $selection.typeText("E-Mail : ")
    #Add hyperlink in the document
    $hlink = $doc.Hyperlinks.Add($selection.Range, "mailto:"+"$ADEmailAddress",'',"mailto:"+"$ADEmailAddress","$ADEmailAddress")
    #Format the hyperlink
        $hlink.Range.Font.Name = 'SFR Light'
        $hlink.Range.Font.Size = 10
    $selection.TypeParagraph()
}
#Les informations générales selon le site (#1)
$selection.TypeParagraph()
$selection.font.bold = 0
$selection.font.size = 10
#Permet de mettre SFR en font 'Font du texte et non le reste de la laig
$string = ("SFR "+$PaysSite+" - ")
$selection.font.name = "Font du texte"
If ($string -match 'SFR'){$selection.TypeText($Matches[0])}
$selection.font.name = "Font du texte"
$selection.TypeText($string -replace 'SFR')
$selection.font.name = "Font du texte"
$selection.font.bold = 0
$selection.font.size = 10
$selection.typeText($AdrSite)
$selection.font.bold = 0
$hlink = $doc.Hyperlinks.Add($selection.Range,"$SiteUrl",'',"$SiteWeb","$SiteWeb")
    $hlink.Range.Font.Name = 'Font du texte'
    $hlink.Range.Font.Size = 10
$selection.typeText(" - ")
$hlink = $doc.Hyperlinks.Add($selection.Range,"$SiteUrlB",'',"$SiteWebB","$SiteWebB")
    $hlink.Range.Font.Name = 'Font du texte'
    $hlink.Range.Font.Size = 10
If ($company -eq "SFRBELUX" -or $company -eq "SFRBELUXBUI") #Permet d'ajouter la deuxième ligne si user BELUX, sinon ne la rajoute pas
{
#Les informations générales selon le site (#2)
$selection.TypeParagraph()
$selection.font.bold = 0
$selection.font.size = 10
#Permet de mettre SFR en font 'Font du texte'
$string2 = ("SFR "+$PaysSite2+" - ")
$selection.font.name = "Font du texte"
If ($string2 -match 'SFR'){$selection.TypeText($Matches[0])}
$selection.font.name = "Font du texte"
$selection.TypeText($string2 -replace 'SFR')
$selection.font.name = "Font du texte"
$selection.font.bold = 0
$selection.font.size = 10
$selection.typeText($AdrSite2)
$selection.font.bold = 0
$hlink = $doc.Hyperlinks.Add($selection.Range,"$SiteUrlBLux",'',"$SiteWebBLux","$SiteWebBLux")
    $hlink.Range.Font.Name = 'Font du texte'
    $hlink.Range.Font.Size = 10
$selection.typeText(" - ")
$hlink = $doc.Hyperlinks.Add($selection.Range,"$SiteUrlBluxB",'',"$SiteWebBluxB","$SiteWebBluxB")
    $hlink.Range.Font.Name = 'Font du texte'
    $hlink.Range.Font.Size = 10
$selection.TypeParagraph()
}
#insertion de la ligne pour la signature
$selection.TypeParagraph()
$selection.InlineShapes.AddPicture($PathSignaturesLine)
#Insertion de l'image dans le word
$selection.TypeParagraph()
$selection.InlineShapes.AddPicture($pathPictures) 
$selection.TypeParagraph()
If (-not (Test-Path "$LocalSignaturePath")) 
    { 
        New-Item -ItemType Directory "$LocalSignaturePath" 
    }
$wdTypes = Add-Type -AssemblyName 'Microsoft.Office.Interop.Word' -Passthru
$wdSaveFormat = $wdTypes | Where {$_.Name -eq "wdSaveFormat"}
#save as DOCX
$path = "$LocalSignaturePath"+ '\' + "$ADDisplayName" + ".docx"
$doc.saveas([ref] "$path", [ref]$saveFormat::wdFormatDocument);
$doc.saveas("$path", $saveFormat::wdFormatDocumentDefault);
#save as HTML
$path = "$LocalSignaturePath"+ '\' + "$ADDisplayName" + ".htm"
$doc.saveas([ref]$path, [ref]$wdSaveFormat::wdFormatHTML);
$doc.saveas($path, $wdSaveFormat::wdFormatHTML);
#save as RTF
$path = "$LocalSignaturePath"+ '\' + "$ADDisplayName" + ".rtf"
$doc.saveas([ref]$path, [ref]$wdSaveFormat::wdFormatRTF);
$doc.saveas($path, $wdSaveFormat::wdFormatRTF);
    
#Save TXT   
$path = "$LocalSignaturePath"+ '\' + "$ADDisplayName" + ".txt"
$doc.saveas([ref]$path, [ref]$wdSaveFormat::wdFormatText);
$doc.saveas($path, $wdSaveFormat::wdFormatText); 
$doc.close();
$word.Quit();

Voilà, possible qu'il est des erreurs, j'ai fais un copier coller mais j'ai changé des trucs (infos serveurs, etc) ! Donc n'hésitez pas si vous avez un soucis ;)
 

PS : Pouvez-vous ajouter Powershell dans la balise de code ?


 

Link to post
Share on other sites
×
×
  • Create New...