15 set 2012

Firma di Outlook e OWA basata sulle informazioni utente in Active Directory (v 1.2)

Introduzione
Chi utilizza Exchange Server e conosce le regole di trasporto, sarà anche a conoscenza del fatto che in teoria esse possono essere utilizzate per implementare delle firme dinamiche nella propria organizzazione. Nonostante sia possibile tecnicamente, questa implementazione nasconde degli evidenti aspetti negativi. Se avete condotto anche solo un paio di test vi sarete resi conto che la firma dell’utente viene sempre collocata in fondo a "tutto" il testo, questo provoca un concatenarsi di firme al termine del messaggio email, in particolare nel caso di molti reply. L'unico sistema davvero efficace è settare la firma localmente, direttamente in Outlook e per ogni utente.
Quanto sopra è sostenibile se parliamo di pochi utenti, ma se nell'azienda per cui lavorate ne conta decine o addirittura centinaia dovrete acquistare prodotti di terze parti.
Fortunatamente esiste una valida alternativa, che come vedremo in questo articolo ci consentirà di generare e impostare in maniera automatica e dinamica le firme locali di Outlook e simultaneamente i file HTML necessari all’importazione delle firme in OWA (Outlook Web App)  tramite EMS (Exchange Management Shell). Un altro vantaggio non da poco è che la procedura è totalmente realizzabile utilizzando l’infrastruttura esistente e quindi totalmente free.
Lo script PowerShell che implementeremo andrà a creare una firma locale di Outlook  per ogni singolo utente avvalendosi dei dati utente presenti in Active Directory.
Il funzionamento è semplice. Ogni volta che si modificherà il file di Word contente un modello predefinito le firme verranno rigenerate dallo script a sua volta distribuito via GPO .
Tutti i file e gli script sono scaricabili dall’indirizzo fornito in fondo all’articolo.
Prerequisiti
Al fine di poter raggiungere il nostro obiettivo avremo bisogno che alcuni prerequisiti vengano soddisfatti:
PowerShell (Già presente in W7, installabile su WXP e distribuibile tramite WSUS)
Office 2003 o successivi (Sono necessari gli Assembly di interoperabilità primari installati di default, in caso contrario sono scaricabili da Microsoft download center
· Almeno un server che abbia il ruolo di Domain Controller
· Exchange Server 2007/10 (Facoltativo, lo script può essere facilmente adattato ad operare in sua assenza)
Installazione
Prima di cominciare verifichiamo che gli utenti AD contengano tutte le informazioni necessarie nei campi preposti. Potete osservare alcuni campi compilati nella figura 1
clip_image001
Figura 1
A questo punto creeremo un file "Modello" su cui basare la nostra firma aziendale e nel quale useremo le variabili dichiarate nello script . Di seguito troverete un esempio in cui le variabili sono evidenziate in blu.
DisplayName
Title
Nome Azienda
Via XXXXXXXX, XX
00000, XXXXXXX (XX)
Tel. TelePhoneNumber, Fax. facsimileTelephoneNumber
Web: XXXXXXXXXXXXX
Email: PostaEL
BlogIQ
Una volta decisi Logo, Font ecc, salvate il file in formato Word facendo attenzione al nome della vostra organizzazione o meglio al nome che è stato dichiarato nello script PowerShell ed in particolare nella variabile "$CompanyName".
$CompanyName = ‘NomeOrganizzazione’
$DomainName = ‘nomedominioAD.local’
Tenendo presente quanto sopra creiamo le cartelle necessarie sotto "NETLOGON" aggiungendo una nuova cartella denominata "sig_files" e poi una sottocartella corrispondente al nome attribuito in precedenza. Una volta terminato avremo un percorso simile a questo:
\\nomedominioAD.local\NETLOGON\sig_files\NomeOrganizzazione\
Non ci resta che copiare il file di Word creato in precedenza in questa posizione, come indicato in Figura2.
clip_image003
Figura 2
Le variabili AD utilizzate in questo script sono riassunte di seguito, a destra si trovano i riferimenti agli attributi dell’oggetto AD.
$ADDisplayName = $ADUser.DisplayName
$ADEmailAddress = $ADUser.mail
$ADTitle = $ADUser.title
$ADTelePhoneNumber = $ADUser.telephoneNumber
$ADdescription = $ADuser.description
$ADFax = $ADuser.facsimileTelephoneNumber
$ADMobile = $ADuser.mobile
$ADDepartment = $ADuser.department
Nel caso in cui ci sia la necessità di aggiungere altre variabili è possibile farlo da ADUC in modalità “Advanced Features” nelle proprietà dell’oggetto AD (utente) sotto “Attribute Editor”. Oltre a cambiate il valore è possibile leggerne il nome dell’attributo che molto spesso è poco intuibile. (Fig. 3)
clip_image004
Figura 3
E’ arrivato il momento di copiare il codice seguente e di salvare il file con estensione .ps1 (Es. Firma.ps1)








Il codice di cui sopra è basato su questo script di Jan Egil Ring ma dovete fare attenzione ad un paio di cose. Lo script originale contiene alcune linee di codice che sono state rimosse e che causavano il salvataggio nel formato errato del file firma che deve essere invece in formato testo. Nella versione 1.1 non sareste stati in grado di rispondere ai messaggi solo testo. Sono state aggiunte alcune variabili e soprattutto la parte che salva la firma in html “filtrato” per OWA. Fate attenzione al “filtrato”, se usate il tag “wdFormatHTML” come nello script originale (1.1) al posto di “wdFormatFilteredHTML” Winword genererà un file molto grande contenente una serie infinita di TAG relativi ad Office che nel nostro caso non sono necessari, Il file diventerebbe troppo grande (32k) per essere correttamente gestito in EMS (Exchange Management Shell) dato che ci viene imposto da Exchange Server un limite hard coded di 8k .

Nelle linee 51 – 52 definiamo il nome della nostra organizzazione e del dominio AD

51:  $CompanyName = ‘YourComapny’  
52:  $DomainName = ‘yourdomain.local



Da 68 a 81 troviamo le variabili AD che abbiamo definito e che abbiamo usato nel file di Word.

Mentre la linea 64 definisce il nome del vostro Exchange Server

$ExchPath = '\\YOUR_EXCHANGE_SERVER\Signatures\'



Dalla 194 alla 196 lo script genera il file per htm in locale per OWA e poi lo copia nella cartella condivisa “Signatures” (Condivisa in precedenza sul server Exchange).

Ora il nostro script PowerShell è pronto per essere distribuito tramite GPO.

Il prossimo passo sarà quello di creare una nuova GPO di nome “Signature”.  (Fig. 4)

image

Figura 4

Per quanto riguarda i parametri da settare dobbiamo soffermarci qualche secondo sul fatto che dovremo “insegnare” a PowerShell ad eseguire il nostro script dato che non avrà nessuna firma digitale.

Sotto Policies –>Administrative Templates –>Windows Component –>  Windows PowerShell –>Turn on script esecution setteremo il parametro su “Enabled” e nelle opzioni “Allow all Scripts” (Fig. 5)

image

Figura 5.

A questo punto dovremo distribuire lo script vero e proprio, magari usando questa stessa GPO. (Fig. 6)

User Configuration –> Policies –> Windows Settings –> Scripts

image

Figura 6

Se nella vostra azienda avete ancora Windows XP allora sarà necessaria una seconda policy filtrata (fig. 7) con WMI (WXP) che chiameremo ad esempio “LegacySignature” dove andremo a definire un file batch che a sua volta eseguirà lo script PowerShell.  Di seguito la linea di codice da inserire nel file batch.




image

Figura 7

Installazione – parte Exchange Server

Partiamo dalla cosa più semplice. Accediamo al nostro Exchange Server, creiamo una nuova cartella di nome "Signatures" e condividiamola assegnando i permessi di scrittura per "Authenticated Users". La cartella dovrà essere accessibile tramite il percorso UNC \\NOMESERVER\Signatures.

Man mano che gli utenti faranno logon dalle macchine la nostra directory si popolerà dei vari file html che useremo per le firme OWA. (Fig. 8)

 image

Figura 8

Se nella vostra firma è stato inserito un logo dovremo affrontare un altro paio di problemini. I file htm generati  da Word contengono un collegamento all’immagine che punta ad una cartella locale con il risultato che OWA visualizzerà l’immagine con una bella X rossa. Inoltre l’immagine verrà collocata da Word in una cartella con nome %username%_file/nomeimmagine.xxx. Come si può immaginare la sostituzione del testo in questo caso non è così banale.

Risolveremo questo problema usando di nuovo PowerShell e avvalendoci delle espressioni regolari.

Il codice html dei vari file firma che troveremo nella cartella Signatures conterrà fra il resto del codice la linea  :

<td><img width=119 height=102 src="administrator_file/image001.gif"></td>


Quello che faremo sarà sostituire la parte src=”” con un link ad un sito web pubblico dove avremo precedentemente caricato la nostra foto del logo (image001.gif)


   <td><img width=119 height=102 src="http://www.publicwebsite.com/image001.gif"></td>



Ecco lo script Powershell (EMS) che permette di correggere tutti i file in un solo colpo e di importare le firme di ogni utente in OWA.




Noterete le variabili $Old (che contiene la Reg Ex) e $New . 

A questo punto l’unica cosa che resta da fare è automatizzare l’importazione con un operazione schedulata giornalmente. 

Nella parte Program/Script inseriremo:
C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe 



mentre nella parte Add Arguments :
-command ". 'C:\Program Files\Microsoft\Exchange Server\V14\bin\RemoteExchange.ps1'; Connect-ExchangeServer -auto; c:\Signatures\script\OWASignature.ps1"    (Fig.9)
image
Figura 9
Da ora in poi ogni volta che andrete a modificare il file Word (della firma) automaticamente verranno aggiornate tutte le firme locali di Outlook e quelle di OWA.  

Tutti i file utilizzati in questo articolo sono scaricabili da questo link: http://sdrv.ms/Pi3mIW

Nessun commento:

Posta un commento