Outlook2016 sigantuur ADinfo põhjal kasutades powershelli

Seoses W10 juurutamisega lõpetas koostöö üks vbs logon skript, mis automaatselt outlooki signatuure ehitas. Seega sai natuke nokitsetud, et see powershelli üle viia mulle arusaadaval viisil. Kogu skript on saadaval täies mahus siin: pastebin.com

Seletan natuke ka selle töötamise põhimõtteid. Kogu töö tehakse ära nende 3 failiga kus:

docx fail – siin on ettevõtte logo, eelnevalt sätestatud font, stiil, värv ja suurus
ps1 fail – siin failis on põhiline skripti tööosa
vbs fail – see fail kutsub ps1 faili hidden parameetriga, ehk siis ühtegi lisaakent ei teki skripti jooksutamise ajal

SIG_Files.PNG

Skript jookseb kasutaja enda õigustega. Selle lõiguga loeme kasutaja enda atribuute ja seame need muutujateks. Telefoni numbrite puhul teen stringi plokkideks, et ei oleks üks pikk jada +37255667788 vaid oleks +372 5566 7788. Eposti URLi jaoks loon eraldi muutjuja mille ette lisan “mailto:”. Ning kuna minu keskkonnas on Office real vaid linna nimi, siis vastavalt sellele muudan linnanime täispikaks aadressiks.

#############################################
#### Get AD information for current user ####
#############################################
$UserName = $env:username
$signatures = "$env:APPDATA\Microsoft\Signatures"
$Filter = "(&(objectCategory=User)(samAccountName=$UserName))"
$Searcher = New-Object System.DirectoryServices.DirectorySearcher
$Searcher.Filter = $Filter
$ADUserPath = $Searcher.FindOne()
$ADUser = $ADUserPath.GetDirectoryEntry()
$ADDisplayName = $ADUser.DisplayName
$ADDeparment = $ADUser.department
$ADEmailAddress = $ADUser.mail
$ADEmailto = "mailto:$ADEmailAddress"
$ADTitle = $ADUser.title
$ADDescription = $ADUser.description
$ADMobile = "Mob: " + $ADUser.mobile.Substring(0,4) + " " + $ADUser.mobile.Substring(4,4) + " " + $ADUser.mobile.Substring(8)
$ADPhone = "Tel: " + $ADUser.telephonenumber.Substring(0,4) + " " + $ADUser.telephonenumber.Substring(4,3) + " " + $ADUser.telephonenumber.Substring(7)
$ADStreetAddress = $ADUserPath.streetaddress
$ADOffice = $ADuser.physicalDeliveryOfficeName
if ($ADOffice -like "Tallinn") {$Adoffice = "Tallina mnt 15, 12345 Tallinn, Eesti"}
if ($ADOffice -like "Tartu") {$Adoffice = "Tartu mnt 16, 12345 Tartu, Eesti"}

Kui kasutaja esimest korda Outlooki logib, siis tal puudub signatuuri kaust. Outlook loob selle alles siis kui läbi kasutajaliidese kästisi signatuur teha. See lõik kontrollib kas vajalik kaust on olemas ja selle puudumisel loob selle.

#########################################
#### Create Outlook Signature folder ####
#########################################
$sigfoldercheck = (Test-Path $signatures)
if ($sigfoldercheck -like "False"){New-Item $signatures -ItemType Directory}

See lõik kontrollib kas kasutjal on Outlooki profiil seadistatud. Kui profiili ei ole siis skript lõpetab töö. See on vajalik, sest ilma profiilita signatuuri genereerimine ei anna soovitud tulemust.

##########################################
#### Check for Active Outlook Profile ####
##########################################
$checkprofile = Test-Path "HKCU:\HKEY_CURRENT_USER\Software\Microsoft\Office\16.0\Outlook\Profiles\Outlook"
if ($checkprofile -like "False") {exit}

See lõik kontrollib kas Registrys on märge skripti varasema töö kohta. Kui märge tuvastatakse siis skript lõpetab töö. Kui märget ei ole, jookseb skript edasi sh. kustutab varasemad samanimelised signatuurid. See on administreerimise seisukohast vajalik samm. Olukorras, kus on vaja muuta kõikide kasutajate signatuuri, saab skripti muuda ja keskhaldusvahendistest märke kustutada. Nii teeb skript enda töö uuesti.

##############################
#### Clean if no REG Flag ####
##############################
$RegFlagCheck = [bool] (Get-ItemProperty "HKCU:\HKEY_CURRENT_USER\Software\VERSIOONIHALDUS\Outlook Signatuur" | select "Signatuur")
if ($RegFlagCheck -eq "True") {exit}
else {
Get-ChildItem -Path "$signatures\Signatuur*" | Remove-Item -Recurse -Force -ErrorAction SilentlyContinue -WarningAction SilentlyContinue

Siin lõigus avame võrgukettalt .docx faili ja täidame selle AD kogutud infoga. (NB! Sellele failile peavad kõikidel kasutajatel olema modify õigused, faili kirjutatakse aga ei salvestata seega on see alati enda originaalkujul). Kasutan ka info täitmisel if ($var) {“do something”} lähenemist, nii talitades ei teki tühje ridu kui kasutjal peaks AD’s infot puudu olema.

######################################
#### Build signature from AD DATA ####
######################################
$objWord = New-object -comobject Word.Application 
$objWord.Visible = $False 
$objDoc = $objWord.Documents.Open("ENTER YOUR *.docx UNC PATH HERE") 
$objSelection = $objWord.Selection 
# Intro
$text = "Lugupidamisega"
$objSelection.TypeText($text)
$objSelection.TypeParagraph()
$objSelection.TypeParagraph()
# Break
$text = "______________________________"
$objSelection.TypeText($text)
$objSelection.TypeParagraph()
# UserName
if ($ADDisplayName) {$objSelection.TypeText($ADDisplayName)
$objSelection.TypeParagraph()}
# JobTitle
if ($ADTitle) {$objSelection.TypeText($ADTitle)
$objSelection.TypeParagraph()}
# Deparment
if ($ADDeparment) {$objSelection.TypeText($ADDeparment)
$objSelection.TypeParagraph()}
# CompanyName
$text = "Contoso Corp"
$objSelection.TypeText($text)
$objSelection.TypeParagraph()
# OfficeAdress
if ($ADOffice) {$objSelection.TypeText($ADOffice)
$objSelection.TypeParagraph()}
# MobilePhone
if ($ADMobile) {$objSelection.TypeText($ADMobile)
$objSelection.TypeParagraph()} 
# OfficePhone
if ($ADPhone) {$objSelection.TypeText($ADPhone)
$objSelection.TypeParagraph()}
# E-Mail
if ($ADEmailAddress) {$hlink = $objSelection.Hyperlinks.Add($objSelection.Range,"$ADEmailto",$False,$False,"$ADEmailAddress")
$hlink.Range.Font.Size = 8
$hlink.Range.Font.Name = "Verdana"
$objSelection.TypeParagraph()}
$objSelection.TypeParagraph()
# CompnayWebPage
$hlink = $objSelection.Hyperlinks.Add($objSelection.Range,“http://www.contoso.com",$False,$False,“www.contoso.com”)
$hlink.Range.Font.Size = 8
$hlink.Range.Font.Name = "Verdana"
$objSelection.TypeParagraph()
# CompanyFB
$hlink = $objSelection.Hyperlinks.Add($objSelection.Range,"https://www.facebook.com/contoso",$False,$False,“www.facebook.com/contoso”) 
$hlink.Range.Font.Size = 8
$hlink.Range.Font.Name = "Verdana"
$objSelection.TypeParagraph()
$objSelection.TypeParagraph()

Siin lõigus salvetame genereeritud signatuuri Outlooki signatuuri kausta *.HTM; *.RTF ja *.TXT formaadis.

##########################################################
#### Save Signature files to Outlook Signature Folder ####
##########################################################
# Save .HTM to signatures folder
$saveFormat = [Enum]::Parse([Microsoft.Office.Interop.Word.WdSaveFormat], "wdFormatHTML");
$path = "$signatures\Signatuur.htm"
$objword.ActiveDocument.saveas([ref]$path, [ref]$saveFormat)
# Save .RTF to signatures folder
$saveFormat = [Enum]::Parse([Microsoft.Office.Interop.Word.WdSaveFormat], "wdFormatRTF");
$path = "$signatures\Signatuur.rtf"
$objword.ActiveDocument.saveas([ref]$path, [ref]$saveFormat)
# Save .TXT to signatures folder
$saveFormat = [Enum]::Parse([Microsoft.Office.Interop.Word.WdSaveFormat], "wdFormatText");
$path = "$signatures\Signatuur.txt"
$objword.ActiveDocument.saveas([ref]$path, [ref]$saveFormat)

Siin lõigus muudame kus Outlookis signatuuri rakendatakse. Siin näites vaid uute sõnumite puhul aga võib ka Reply sõnumite puhul kui rea eest eemaldada #. Samuti suletakse *.docx fail salvestamata.

##########################################
#### Set Signature options in Outlook ####
##########################################
$EmailOptions = $objWord.EmailOptions
$EmailSignature = $EmailOptions.EmailSignature
$EmailSignature.NewMessageSignature = “Signatuur”
# $EmailSignature.ReplyMessageSignature = “Signatuur”
$objWord.quit()

Siin lõigus lisatakse registrisse eelpool mainitud märge administreerimise lihtsustamiseks tulevikus 🙂

######################
#### Set REG Flag ####
######################
$root = "HKCU:\HKEY_CURRENT_USER\SOFTWARE\VERSIOONIHALDUS\"
$program = "Outlook Signatuur"
$rootcheck = Test-Path -Path $root
$programcheck = Test-Path -Path $root$program
If ($rootcheck -like "False") {New-Item -Path $root}
If ($programcheck -like "False") {New-Item -Path $root$program}
New-ItemProperty -Path $root$program -Name "Signatuur" -PropertyType STRING -Value 1
}

Lisan siia hiljem ka mõne näidise.