Há algum tempo atrás escrevemos um post sobre como criar um Script de logon para definir assinatura no Outlook. Aqui faremos um novo POST usando um documento Word como modelo para a assinatura, facilitando que outra área possa alterar o padrão de assinatura mesmo sem entender de código.
Antes de começar, serão necessárias algumas considerações:
- Para esse post, será criado um script vbs (deverá criar um arquivo com extensão .vbs, não em powershell);
- O objetivo aqui é pegar os campos do usuário no AD (cargo, setor, telefone, e-mail, etc.) e usá-los para a assinatura do Outlook. Portanto é necessário ter os campos do AD preenchidos;
Definindo os dados que serão usados
Em primeiro lugar, verifique quais campos/dados do usuário você irá importar na assinatura. Para isso, verifique os atributos no LDAP (na Ferramenta Usuários e Computadores do Active Directory, clique no menu Exibir (na barra de menu superior), marque a opção Recursos avançados e depois abra um usuário (sem usar o localizar, navegue nas OUs), vá na aba Editor de Atributos e consulte quais informações irá usar.
Se preferir, pode também consultar os atributos do AD no site SelfADSI
Para o arquivo de modelo de assinatura
Agora, crie um arquivo do Word Template.docx no compartilhamento Netlogon de seu Active Directory. Dentro desse arquivo coloque os campos que deseja utilizar (deixe simples inicialmente e não use caixas de textos), por exemplo:
Atenciosamente, [displayName] ou [UPPER_displayName] [Title] ou [UPPER_Title] [MAIL] [TelephoneNumber] [DEPARTAMENT] ou [UPPER_DEPARTAMENT] |
Vá na OU onde estão os usuários que terão essa assinatura (não sugerimos ir no domínio inteiro), faça uma GPO chamada Assinatura Outlook e link ela nesta OU. Nessa GPO vá em User Configuration > Windows Configuration > Scripts e abra Logon.
Para o script VBS
Na parte de Logon, da GPO, clique em Adicionar, insira o nome assinatura.vbs e clique em OK. Agora clique em Show Files, dentro dessa pasta crie o arquivo assinatura.vbs (se não conseguir criar arquivo, abra a mesma estrutura de pastas pelo caminho local, em vez do compartilhamento Netlogon) e com o seguinte conteúdo:
On Error Resume Next
Template = "\\suaempresa.com.br\Netlogon\Template.docx"
strSignature = "AD Signature"
Set objSysInfo = CreateObject("ADSystemInfo")
Set fso = CreateObject("Scripting.FileSystemObject")
'Verificar se o arquivo existe (se não existir, cancela o script)
If Not fso.FileExists(Template) Then
wscript.quit
End If
'Inicio do Script
Set objUser = GetObject("LDAP://" & objSysInfo.UserName)
'Conexão com o Word
Const wdReplaceAll = 2
Set objWord = CreateObject("Word.Application")
objWord.Visible = False
'Para conseguir abrir o documento, mesmo que ele já esteja aberto por outro usuário
Set objDoc = objWord.Documents.Open(Template,,True)
'Para conseguir alterar links do documento
Set colHyperlinks = objDoc.Hyperlinks
objWord.ActiveWindow.ActivePane.View.Type = 1
Set objSelection = objWord.Selection
Set objEmailOptions = objWord.EmailOptions
Set objSignatureObject = objEmailOptions.EmailSignature
Set objSignatureEntries = objSignatureObject.EmailSignatureEntries
Set objSelection = objWord.Selection
'Funcao para alterar dados no template do Word
Sub Altera(Original, Alterado)
objSelection.Find.Forward = TRUE
objSelection.Find.MatchWholeWord = TRUE
objSelection.Find.text = Original
objSelection.Find.Replacement.Text = Alterado
objSelection.Find.Execute ,,,,,,,,,,wdReplaceAll
'Repete a mesma ação de alterar o texto, mas verificando se é para deixar em maiusculo
objSelection.Find.text = Replace(Original,"[","[UPPER_")
objSelection.Find.Replacement.Text = UCase(Alterado)
objSelection.Find.Execute ,,,,,,,,,,wdReplaceAll
'Altera os links
Link = Original
Link = Replace(Link,"[","%5b")
Link = Replace(Link,"]","%5d")
For Each objHyperlink in colHyperlinks
If objHyperlink.Address = Link Then
If InStr(Alterado, "@") Then
objHyperlink.Address = "mailto:"& Alterado
Else
objHyperlink.Address = Alterado
End If
End If
Next
End Sub
'Percorre todos os dados do AD para substituir no template
Set objClass = GetObject(objUser.Schema)
For Each strAttribute in objClass.MandatoryProperties
strValues = objUser.GetEx(strAttribute)
For Each strValue in strValues
Altera "["&strAttribute&"]",strValue
On Error Resume Next
Next
Next
For Each strAttribute in objClass.OptionalProperties
strValues = objUser.GetEx(strAttribute)
For Each strValue in strValues
Altera "["&strAttribute&"]",strValue
On Error Resume Next
Next
Next
'Percorre documento e salva como assinatura
Set objSelection = objDoc.Range()
objSignatureEntries.Add strSignature, objSelection
objSignatureObject.NewMessageSignature = strSignature
objSignatureObject.ReplyMessageSignature = strSignature
objDoc.Saved = True
objWord.Quit
Faça os testes e, funcionando corretamente, altere o arquivo do Word conforme sua necessidade (alterando fonte, tamanho e cor).
Caso queira algumas sugestões de modelo de assinatura, sugerimos que leia nosso post Modelos de assinatura para o Outlook.
Adicionar um teste de conexão ao AD, com 5 tentativas – Opcional
Caso queira adicionar um teste de conexão (quando o laptops conecta no AD via Wifi, pode em cache mas ainda não ter acesso à rede para consultar o AD), no código original localize a seguinte linha:
Set objUser = GetObject("LDAP://" & objSysInfo.UserName)
Substitua essa linha pelo seguinte código:
'5 tentativas de conexão ao AD (problemas em laptops em Wifi quando loga em cache, mas ainda não tem acesso à rede)
xcount = 0
While xcount < 5
Set objUser = GetObject("LDAP://" & objSysInfo.UserName)
If IsNull(objUser) or IsEmpty(objUser) Then
xcount = xcount+1
If (xcount = 5) Then
Wscript.quit
Else
Wscript.sleep 3000
End If
Else
xcount = 5
End If
Wend
Fontes/Referências
NVLAN – Modelos de assinatura para o Outlook
NVLAN – Script de logon para definir assinatura no Outlook
Mais Informações
Esperamos ter ajudado da melhor forma possível e estaremos sempre a disposição para mais informações.
Entre em contato conosco pelo e-mail equipe@nvlan.com.br.