Quantcast
Channel: The Official Scripting Guys Forum! forum
Viewing all articles
Browse latest Browse all 15028

PowerShell Signature script

$
0
0

Hi all, 

I have a "little" big problem with a part of the my script.

All parts of the script works well except setting the signature generated as default and only if the script is deployed by GPO 

If I run the script from desktop works fine and set the new signature as default

Instead, If the script are deployed by GPO works in all parts but is unable to set the new signature as default.

WHY? :-(

###########################################################################”
#
# COMMENT: Script to create an Outlook signature based on user information from Active Directory.
# Adjust the variables in the “Custom variables”-section
# Create an Outlook-signature from Microsoft Word (logo, fonts etc) and copy this signature to \\domain\NETLOGON\sig_files\$CompanyName\$CompanyName.docx
#	 This script supports the following keywords:
#	 DisplayName
#	 Title
#	 Email
#
# VERSION HISTORY:
# 1.0 – Initial release
#
#
# 
###########################################################################”

#Custom variables
$CompanyName = ‘iQuad’
$DomainName = ‘iqd.local’

#test path and crete folder
$TARGETDIR = $env:APPDATA + "\Microsoft\Signatures"
if(!(Test-Path -Path $TARGETDIR )){
    New-Item -ItemType directory -Path $TARGETDIR
}


$SigSource = “\\$DomainName\netlogon\sig_files\$CompanyName”
$ForceSignatureNew = ’1' #When the signature are forced the signature are enforced as default signature for new messages the next time the script runs. 0 = no force, 1 = force
$ForceSignatureReplyForward = ’1' #When the signature are forced the signature are enforced as default signature for reply/forward messages the next time the script runs. 0 = no force, 1 = force

#Environment variables
$AppData=(Get-Item env:appdata).value
$SigPath = ‘\Microsoft\Signatures’
$LocalSignaturePath = $AppData+$SigPath
$RemoteSignaturePathFull = $SigSource+’\'+$CompanyName+’.docx’
$ExchPath = '\\EX1\Signatures\'


#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
$ADEmailAddress = $ADUser.mail
$ADTitle = $ADUser.title
$ADTelePhoneNumber = $ADUser.telephoneNumber
$ADdescription = $ADuser.description
$ADFax = $ADuser.facsimileTelephoneNumber
$ADMobile = $ADuser.mobile
$ADDepartment = $ADuser.department


#Setting registry information for the current user
$CompanyRegPath = “HKCU:\Software\”+$CompanyName

if (Test-Path $CompanyRegPath)
{}
else
{New-Item -path “HKCU:\Software” -name $CompanyName}

if (Test-Path $CompanyRegPath’\Outlook Signature Settings’)
{}
else
{New-Item -path $CompanyRegPath -name “Outlook Signature Settings”}

$SigVersion = (gci $RemoteSignaturePathFull).LastWriteTime #When was the last time the signature was written
$ForcedSignatureNew = (Get-ItemProperty $CompanyRegPath’\Outlook Signature Settings’).ForcedSignatureNew
$ForcedSignatureReplyForward = (Get-ItemProperty $CompanyRegPath’\Outlook Signature Settings’).ForcedSignatureReplyForward
$SignatureVersion = (Get-ItemProperty $CompanyRegPath’\Outlook Signature Settings’).SignatureVersion
Set-ItemProperty $CompanyRegPath’\Outlook Signature Settings’ -name SignatureSourceFiles -Value $SigSource
$SignatureSourceFiles = (Get-ItemProperty $CompanyRegPath’\Outlook Signature Settings’).SignatureSourceFiles

#Forcing signature for new messages if enabled
if ($ForcedSignatureNew -eq ’1')
{
#Set company signature as default for New messages
$MSWord = New-Object -com word.application
$EmailOptions = $MSWord.EmailOptions
$EmailSignature = $EmailOptions.EmailSignature
$EmailSignatureEntries = $EmailSignature.EmailSignatureEntries
$EmailSignature.NewMessageSignature=$CompanyName
$MSWord.Quit()
}

#Forcing signature for reply/forward messages if enabled
if ($ForcedSignatureReplyForward -eq '1')
{
#Set company signature as default for Reply/Forward messages

 $MSWord = New-Object -com word.application
 $EmailOptions = $MSWord.EmailOptions
 $EmailSignature = $EmailOptions.EmailSignature
 $EmailSignatureEntries = $EmailSignature.EmailSignatureEntries
 $EmailSignature.ReplyMessageSignature=$CompanyName

 $MSWord.Quit()
}

#Copying signature sourcefiles and creating signature if signature-version are different from local version
if ($SignatureVersion -eq $SigVersion){}
else
{
#Copy signature templates from domain to local Signature-folder
Copy-Item “$SignatureSourceFiles\*” $LocalSignaturePath -Recurse -Force

$ReplaceAll = 2
$FindContinue = 1
$MatchCase = $False
$MatchWholeWord = $True
$MatchWildcards = $False
$MatchSoundsLike = $False
$MatchAllWordForms = $False
$Forward = $True
$Wrap = $FindContinue
$Format = $False

#Insert variables from Active Directory to rtf signature-file
$MSWord = New-Object -com word.application
$fullPath = $LocalSignaturePath+’\'+$CompanyName+’.docx’
$MSWord.Documents.Open($fullPath)

$FindText = “DisplayName”
$ReplaceText = $ADDisplayName.ToString()
$MSWord.Selection.Find.Execute($FindText, $MatchCase, $MatchWholeWord,	$MatchWildcards, $MatchSoundsLike, $MatchAllWordForms, $Forward, $Wrap,	$Format, $ReplaceText, $ReplaceAll	)

$FindText = “Title”
$ReplaceText = $ADTitle.ToString()
$MSWord.Selection.Find.Execute($FindText, $MatchCase, $MatchWholeWord,	$MatchWildcards, $MatchSoundsLike, $MatchAllWordForms, $Forward, $Wrap,	$Format, $ReplaceText, $ReplaceAll	)

# $MSWord.Selection.Find.Execute(“PostaEL”)
$FindText = “PostaEL”
$ReplaceText = $ADEmailAddress.ToString()
$MSWord.Selection.Find.Execute($FindText, $MatchCase, $MatchWholeWord,	$MatchWildcards, $MatchSoundsLike, $MatchAllWordForms, $Forward, $Wrap,	$Format, $ReplaceText, $ReplaceAll	)


$FindText = “TelePhoneNumber”
$ReplaceText = $ADTelePhoneNumber.ToString()
$MSWord.Selection.Find.Execute($FindText, $MatchCase, $MatchWholeWord,	$MatchWildcards, $MatchSoundsLike, $MatchAllWordForms, $Forward, $Wrap,	$Format, $ReplaceText, $ReplaceAll	)

$FindText = “facsimileTelephoneNumber”
$ReplaceText = $ADFax.ToString()
$MSWord.Selection.Find.Execute($FindText, $MatchCase, $MatchWholeWord,	$MatchWildcards, $MatchSoundsLike, $MatchAllWordForms, $Forward, $Wrap,	$Format, $ReplaceText, $ReplaceAll	)

$FindText = “BlogIQ”
$ReplaceText = $ADDepartment.ToString()
$MSWord.Selection.Find.Execute($FindText, $MatchCase, $MatchWholeWord,	$MatchWildcards, $MatchSoundsLike, $MatchAllWordForms, $Forward, $Wrap,	$Format, $ReplaceText, $ReplaceAll	)


# $MSWord.ActiveDocument.Hyperlinks.Add($MSWord.Selection.Range, “mailto:”+$ADEmailAddress.ToString(), $missing, $missing, $ADEmailAddress.ToString())

$MSWord.ActiveDocument.Save()
$saveFormat = [Enum]::Parse([Microsoft.Office.Interop.Word.WdSaveFormat], “wdFormatFilteredHTML”);
[ref]$BrowserLevel = “microsoft.office.interop.word.WdBrowserLevel” -as [type]

$MSWord.ActiveDocument.WebOptions.OrganizeInFolder = $true
$MSWord.ActiveDocument.WebOptions.UseLongFileNames = $true
$MSWord.ActiveDocument.WebOptions.BrowserLevel = $BrowserLevel::wdBrowserLevelMicrosoftInternetExplorer6
$path = $LocalSignaturePath+’\'+$CompanyName+”.htm”

$MSWord.ActiveDocument.saveas([ref]$path, [ref]$saveFormat)

# Save html file with username from AD (OWA)
$pathOWA = $LocalSignaturePath+’\'+$UserName+”.htm”
$MSWord.ActiveDocument.saveas([ref]$pathOWA, [ref]$saveFormat)
Copy-Item “$LocalSignaturePath\$UserName.htm” "$ExchPath" -Recurse -Force



# Saving rtf and txt 

$saveFormat = [Enum]::Parse([Microsoft.Office.Interop.Word.WdSaveFormat], “wdFormatRTF”);
$path = $LocalSignaturePath+’\'+$CompanyName+”.rtf”
$MSWord.ActiveDocument.SaveAs([ref] $path, [ref]$saveFormat)

$saveFormat = [Enum]::Parse([Microsoft.Office.Interop.Word.WdSaveFormat], “wdFormatText”);
$path = $LocalSignaturePath+’\'+$CompanyName+”.rtf”
$MSWord.ActiveDocument.SaveAs([ref] $path, [ref]$saveFormat)

$saveFormat = [Enum]::Parse([Microsoft.Office.Interop.Word.WdSaveFormat], “wdFormatText”);
$path = $LocalSignaturePath+’\'+$CompanyName+”.txt”
$MSWord.ActiveDocument.SaveAs([ref] $path, [ref]$saveFormat)

$MSWord.ActiveDocument.Close()

$MSWord.Quit()

}

#Stamp registry-values for Outlook Signature Settings if they doesn`t match the initial script variables. Note that these will apply after the second script run when changes are made in the “Custom variables”-section.
if ($ForcedSignatureNew -eq $ForceSignatureNew){}
else
{Set-ItemProperty $CompanyRegPath’\Outlook Signature Settings’ -name ForcedSignatureNew -Value $ForceSignatureNew}

if ($ForcedSignatureReplyForward -eq $ForceSignatureReplyForward){}
else
{Set-ItemProperty $CompanyRegPath’\Outlook Signature Settings’ -name ForcedSignatureReplyForward -Value $ForceSignatureReplyForward}

if ($SignatureVersion -eq $SigVersion){}
else
{Set-ItemProperty $CompanyRegPath’\Outlook Signature Settings’ -name SignatureVersion -Value $SigVersion}

$ForceSignatureNew = ’1' #When the signature are forced the signature are enforced as default signature for new messages the next time the script runs. 0 = no force, 1 = force
$ForceSignatureReplyForward = ’1' #When the signature are forced the signature are enforced as default signature for reply/forward messages the next time the script runs. 0 = no force, 1 = force


Andrea Gallazzi
windowserver.it - blog: andreagx.blogspot.com
This posting is provided AS IS with no warranties, and confers no rights.




Viewing all articles
Browse latest Browse all 15028

Trending Articles



<script src="https://jsc.adskeeper.com/r/s/rssing.com.1596347.js" async> </script>