Fichero de firmas para Outlook con Autoit

Active Directory, Autoit3, Scripts 1 Comentario »

Bueno, parece ser que alguien si está interesado en crear una firma corportiva para todos los usuarios.

El procedimiento lo podemos dividir en dos fases:

  • Creacion de los ficheros que contienen las firmas mediante ejecutable de autoit que todos los usuarios ejecutan mediante el script de login al dominio. Mediante el siguiente script compilado recogemos los datos del Active Directory y los utilizamos para crear la firma en tres formatos, html, rtf y txt. Los tres formatos se crean para que según tengamos configurado nuestro outlook en uno o otro formato (html, rtf o txt) siempre exista el fichero de firmas a cargar.


#Region ;**** Directives created by AutoIt3Wrapper_GUI ****
#AutoIt3Wrapper_icon=X:\Scripts\Au3\EmailSign\EmailSign.ico
#AutoIt3Wrapper_outfile=X:\Scripts\Au3\EmailSign\EmailSign.exe
#AutoIt3Wrapper_Res_Description=Crea la firma para el perfil de outlook
#AutoIt3Wrapper_Res_Fileversion=1.1.0.0
#AutoIt3Wrapper_Res_LegalCopyright=David Suárez
#AutoIt3Wrapper_Res_Field=AutoIt Version|%AutoItVer%
#AutoIt3Wrapper_Res_Field=Fecha|%date% %time%
#EndRegion ;**** Directives created by AutoIt3Wrapper_GUI ****


#include <GUIConstants.au3>
#include <Misc.au3>
#include <File.au3>
#include <Process.au3>
#include <Constants.au3>
#include <string.au3>

Dim $UserObj
Dim $sigpath                = ( @AppDataDir &'\microsoft\signatures' )
Dim $sigpathOffice2007      = ( @AppDataDir &'\Microsoft\Firmas' )
Dim $msg
Dim $msg1
Dim $msg2
Dim $domain = @LogonDomain
Dim $username = @UserName
Const $ADS_NAME_INITTYPE_GC = 3
Const $ADS_NAME_TYPE_NT4 = 3
Const $ADS_NAME_TYPE_1779 = 1

$oMyError = ObjEvent("AutoIt.Error", "ComError")
$objRootDSE = ObjGet("LDAP://RootDSE")
; DNS domain name.
$objTrans = ObjCreate("NameTranslate")
$objTrans.Init ($ADS_NAME_INITTYPE_GC, "")
$objTrans.Set ($ADS_NAME_TYPE_1779, @LogonDomain)
$objTrans.Set ($ADS_NAME_TYPE_NT4, @LogonDomain & "\" & @UserName)
$strUserDN = $objTrans.Get ($ADS_NAME_TYPE_1779)
$UserObj = ObjGet("LDAP://" & $strUserDN)
DIM $fullname                = $UserObj.FullName
DIM $title                    = $UserObj.title
DIM $description            = $UserObj.description
DIM $emailaddress            = $UserObj.mail
DIM $officenumber            = $UserObj.TelephoneNumber
Dim $otherFax                = $UserObj.facsimileTelephoneNumber

Dim $Disclaimer                = ("Cuidemos del medio ambiente. Por favor no imprima este correo si no es necesario.")
Dim $Defaultsigname            = ("DefaultSign")
Dim $sigrtf                    = ("DefaultSign.rtf")
Dim $sightm                    = ("DefaultSign.htm")
Dim $sigtxt                    = ("DefaultSign.txt")

If FileExists (@ProgramFilesDir & '\Microsoft Office\Office12\outlook.exe') Then    $sigpath = $sigpathoffice2007

If Not FileExists ( $sigpath &'\'& $sigrtf) Then Call ("make_rtf")
If Not FileExists ( $sigpath &'\'& $sigtxt) Then Call ("make_txt")
If Not FileExists ( $sigpath &'\'& $sightm) Then Call ("make_html")

Func make_rtf ()
$filename1 = $sigpath & '\' & $sigrtf
$msg1 &= "{\rtf1\ansi\ansicpg1252\deff0\deflang2057{\fonttbl{\f0\fswiss\fcharset0 Arial;}}"& @CRLF
$msg1 &= "\viewkind4\uc1\pard\f0\fs20 -- \par"& @CRLF
$msg1 &= "Rmte.: " & $title & " "&$fullname & "\par"& @CRLF
$msg1 &= $description & "\par"& @CRLF
$msg1 &= "Email: " & $emailaddress & "\par"& @CRLF
$msg1 &= "Tel: 91 888 88 88 Ext. " & $officenumber & "\par"& @CRLF
If $otherFax<>'' Then $msg1 &= "Fax Servicio: " & $otherFax &"\par"& @CRLF
$msg1 &= "Fax: 91 888 88 58 \par"& @CRLF
$msg1 &= "C. Direccion, 42 \par"& @CRLF
$msg1 &= "28001 (Madrid) \par"& @CRLF
$msg1 &= "http://www.tuweb.com \par"& @CRLF
$msg1 &= $Disclaimer & "\par"& @CRLF
$msg1 &= "}"
FileWrite($filename1, $msg1 )
EndFunc

Func make_html ()
$filename = $sigpath & '\' & $sightm
If Not FileExists ( $sigpath &'\smalllogo.gif') Then FileInstall("X:\Scripts\Au3\EmailSign\smalllogo.gif", $sigpath & '\smalllogo.gif')
$msg &= "<!DOCTYPE html PUBLIC ""-//W3C//DTD XHTML 1.0 Transitional//EN"" ""http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"">"& @CRLF
$msg &= "<html xmlns=""http://www.w3.org/1999/xhtml"" ><style type=""text/stylesheet"" media=""screen"">a:link, a:visited, a:hover, a:active { font-size:7.5pt;font-family:Verdana,sans-serif;color:#4E5C64; }</style>"& @CRLF
$msg &= "<BODY>"& @CRLF
$msg &= "<div style=""font-size:7.5pt; font-family:Verdana, sans-serif; color: #4E5C64"">"& @CRLF
$msg &= "<p>Rmte.: <strong>" & $title & " "& $fullname & "<br/>"& @CRLF
$msg &= $description & "</strong><br/>"& @CRLF
$msg &= "Email: <a href=""mailto:" & $emailaddress & """>" & $emailaddress & "</a><br/>"& @CRLF
$msg &= "Tel: <strong> 91 888 88 88</strong> Ext. <strong>" & $officenumber& "</strong><br />"& @CRLF
If $otherFax<>'' Then $msg &= "Fax Servicio: <strong>" & $otherFax & "</strong><br />"& @CRLF
$msg &= "Fax General: <strong> 91 888 88 58</strong><br />"& @CRLF
$msg &= "<IMG alt='' hspace=0 src='smalllogo.gif' align='baseline' border='0'><br/>"& @CRLF
$msg &= "C. Direccion, 42<br />"& @CRLF
$msg &= "28001 (Madrid)<br />"& @CRLF
$msg &= "<a href=""http://www.tuweb.com"" style=""color:#4E5C64;"">http://www.tuweb.com</a></p>"
$msg &= "<p style=""font-size:8pt;color: #669900"">" & $Disclaimer & "</p>"
FileWrite($filename, $msg )
EndFunc

Func make_txt ()
$filename2 = $sigpath & '\' & $sigtxt
$msg2 &= "-- " & @CRLF
$msg2 &= "Rmte.: " & $title & " " & $fullname & @CRLF
$msg2 &=  $description & @CRLF
$msg2 &= "Email: " & $emailaddress & @CRLF
$msg2 &= "Tel: 91 888 88 88 Ext. " & $officenumber & @CRLF
If $otherFax<>'' Then $msg2 &= "Fax Servicio: " & $otherFax & @CRLF
$msg2 &= "Fax: 91 888 88 58"& @CRLF
$msg2 &= "C. Direccion, 42"& @CRLF
$msg2 &= "28001 (Madrid)"& @CRLF
$msg2 &= "http://www.tuweb.com"& @CRLF
$msg2 &= $Disclaimer
FileWrite($filename2, $msg2 )
EndFunc

;COM Error function
Func ComError()
If IsObj($oMyError) Then
$HexNumber = Hex($oMyError.number, 8 )
SetError($HexNumber)
Else
SetError(1)
EndIf
Return 0
EndFunc ;==>ComError

  • Indicarle a las estaciones mediante el Active Directory cual es la firma que han de cargar desde el directorio de firmas de cada ordenador.
    Esta parte la tengo explicada en el post Directiva AD de firma por defecto en Outlook 2007
    por lo que no volveré a hacerlo ahora.

Descarga el script de autoit desde aqui.

Visual Basic Script para conocer el propietario de un archivo.

Active Directory, Scripts No hay Comentarios »

Este es un script sencillo que nos permite conocer quien es el propietario de un archivo.

Evidentemente en este script el nombre del archivo va incluido dentro del código pero bien utilizado nos amplia un abanico de posibilidades para catalogar ficheros de un directorio de red u otras características que queramos extraer de las propiedades de un fichero.

On Error Resume Next

strComputer = “.”
Set objWMIService = GetObject(“winmgmts:” _
& “{impersonationLevel=impersonate}!\\” & strComputer & “\root\cimv2″)

strFile = “P:\EUROCAJA.XLS” ‘El fichero, cámbialo por lo que quieras

Set colItems = objWMIService.ExecQuery _
(“ASSOCIATORS OF {Win32_LogicalFileSecuritySetting=’” & strFile & “‘}” _
& ” WHERE AssocClass=Win32_LogicalFileOwner ResultRole=Owner”)

For Each objItem in colItems
Wscript.Echo objItem.ReferencedDomainName
Wscript.Echo objItem.AccountName
Next

Copiar el código, pegarlo en un documento de notepad (por ejemplo) y guardarlo como FileOwner.vbs

Directiva AD de firma por defecto en Outlook 2007

Active Directory 8 Comentarios »

Seguramente si has llegado hasta este post te ha ocurrido lo mismo que a mi. Has migrado Microsoft Office a la versión 2007 y al intentar asignar una firma por defecto en la plantilla adm del active directory has encontrado que el apartado donde se encontraba ya no existe.

Bueno, en realidad la solución es muy sencilla y consiste en modificar la plantilla adm del Outlook 2007 (versión 12 de Office) y añadirle lo mismo que tenia la del Outlook 2003 modificando las rutas apropiadas.

Después de la política:

CATEGORY !!L_MailFormat
POLICY !!L_DisableSignatures
KEYNAME Software\Policies\Microsoft\Office\12.0\Common\MailSettings
VALUENAME DisableSignatures
VALUEON NUMERIC 1
VALUEOFF NUMERIC 0
EXPLAIN !!L_DisableSignaturesExplain
END POLICY

Debemos añadir:
CATEGORY "Signature"
POLICY "Disable signatures for new messages"
KEYNAME Software\Policies\Microsoft\Office\12.0\Common\MailSettings
PART "Disable signatures for new messages" CHECKBOX
VALUENAME NewSignature
VALUEON ""
END PART
END POLICY
POLICY "Disable signatures for replies and forwards"
KEYNAME Software\Policies\Microsoft\Office\12.0\Common\MailSettings
PART "Disable signatures for replies and forwards" CHECKBOX
VALUENAME ReplySignature
VALUEON ""
END PART
END POLICY
POLICY "Signature for new messages"
KEYNAME Software\Policies\Microsoft\Office\12.0\Common\MailSettings
PART "Signature for new messages" EDITTEXT
VALUENAME NewSignature

END PART
END POLICY
POLICY “Signature for replies and forwards”
KEYNAME Software\Policies\Microsoft\Office\12.0\Common\MailSettings
PART “Signature for replies and forwards” EDITTEXT
VALUENAME ReplySignature

END PART
END POLICY
END CATEGORY

Si te das cuenta es la misma que habia en “outlk11.adm” pero las rutas de las KEYNAME han cambiado de …Office\11.0\… a …Office\12.0\…

Esta plantilla combinada con una pequeña aplicación escrita en Autoit crea las firmas para todos los usuarios de la red.

A ver si escribo el post con la pequeña aplicación de Autoit que extrae información del Active Directory para crear la firma y ayudar a quien le pueda interesar. Si a alguien le urge esta aplicación que lo comente en este post pero lo pondré lo antes posible.

Actualización 18-Enero-2010: En el post Fichero de firmas para Outlook con Autoit podeis encontrar el script de Autoit al que hago mención.

Errores en visor de sucesos: Userenv 1030 y 1058 de acceso a gpt.ini

Active Directory No hay Comentarios »

Se aplica a Windows 2003 Server. Tenemos políticas de grupo que no se despliegan, y en el servidor se suceden los errores 1058 y 1030 cada 5 minutos.

Tipo de evento: error
Origen del suceso: Userenv

Categoría del suceso: ninguna

Id. de suceso: 1030
Descripción: Windows no puede hacer una consulta de la lista de objetos de directiva de grupo. Un mensaje que describe la razón de esto fue registrado previamente por el motor de la directiva. Para obtener más información, vea el Centro de ayuda y soporte técnico en http://support.microsoft.com.

y

Tipo de evento: error
Origen del suceso: Userenv
Categoría del suceso: ninguna
Id. de suceso: 1058
Descripción: Windows no puede obtener acceso al archivo gpt.ini para GPO CN={31B2F340-016D-11D2-945F-00C04FB984F9},CN=Policies,CN=System,DC=dominio,DC=com. El archivo debe estar presente en la ubicación &lt;\\dominio\sysvol\domain\Policies\{31B2F340-016D-11D2-945F-00C04FB984F9}\gpt.ini&gt;. (Acceso denegado. ). Se ha anulado el proceso de directiva de grupo. Para obtener más información, vea el Centro de ayuda y soporte técnico en http://support.microsoft.com.

Problema

No se despliegan algunas políticas de grupo desde el controlador de dominio, y en el visor de sucesos, en Sistema, vemos que se repiten los ID 1058 y 1030.

Solución

Lo primero que se debe actualizar, es el SP2 de Windows 2003 Server. En caso de tenerlo, hay que seguir dos pasos:

PASO 1 (modificación del registro):

  • Haga clic en Inicio y en Ejecutar, escriba regedit en el cuadro Abrir y haga clic en Aceptar.
  • En el Editor del Registro, expanda la siguiente subclave del Registro: HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon
  • Si la entrada WaitForNetwork no está, debe agregarla. Para ello, siga estos pasos:
  • Haga clic con el botón secundario del mouse en la subclave Winlogon, haga clic en Nuevo y haga clic en Valor Dword.
  • En el cuadro Nombre del valor, escriba WaitForNetwork.
  • Haga clic con el botón secundario del mouse en WaitForNetwork y, a continuación, haga clic en Modificar.
  • En el cuadro de diálogo Editar valor DWORD, en el cuadro Información del valor, escriba 1 y haga clic en Aceptar.
  • Salga del Editor del Registro.

PASO 2 (DFSUTIL):

  • Haga clic en Inicio y en Ejecutar, escriba cmd y haga clic en Aceptar.
  • En el símbolo del sistema, escriba dfsutil /PurgeMupCache y presione ENTRAR.

Al ejecutar en el Windows 2003 Server el comando gpupdate /force debe aparecer un evento nuevo el visor:

Origen SceCli id: 1704. Se ha aplicado correctamente la directiva de seguridad… y los eventos anteriores dejan de salir.

WP Theme & Icons originales por N.Design Studio.
Aviso Legal Entradas RSS Comentarios RSS Iniciar sesión