Tag - windows

Entries feed

Friday, August 26 2016

Updatengine : désinstaller un logiciel avant d'en installer un nouveau

Nous avons déjà parlé d'Updatengine dans ces pages : c'est un logiciel libre de déploiement de logiciels pour Windows composé de clients sur chaque poste contrôlés par un serveur développé sous Python/Django. Je l'utilise avec bonheur en production sur un parc d'une trentaine de machines avec grande satisfaction.

Récemment, j'ai cherché à désinstaller un logiciel avant d'en installer la mise à jour.

Possibilité 1 : le logiciel est déployé avec Windows Installer

Si le logiciel a été déployé avec Windows Installer, alors l'utilitaire "wmic" permet de le désinstaller. Le script de désinstallation pourra alors ressembler à :

wmic product where "name like 'Logiciel%'" call uninstall
logiciel-nouvelle-version.exe /s
section_end
download_no_restart

Par exemple, pour désinstaller les anciennes versions de Java avant d'en installer une nouvelle, on pourra utiliser :

wmic product where "name like 'Java%'" call uninstall
jre-8u101-windows-x64.exe /s
section_end
download_no_restart

Possibilité 2 : s'il n'est pas visible/désinstallable avec WMIC

On peut alors simplement exécuter le désinstallateur (à condition d'en connaître le chemin) :

IF EXIST "C:\Program Files\Logiciel\uninstall.exe" ("C:\Program Files\Logiciel\uninstall.exe" /s Logiciel-nouvelle-version-install.exe /s) ELSE (Logiciel-nouvelle-version-install.exe /s) )

Par exemple pour SumatraPDF, lecteur PDF libre pour Windows, cela pourra devenir :

IF EXIST "C:\Program Files\SumatraPDF\uninstall.exe" ("C:\Program Files\SumatraPDF\uninstall.exe" /s SumatraPDF-3.1.2-install.exe /s) ELSE (IF EXIST "C:\Program Files (x86)\SumatraPDF\uninstall.exe" ("C:\Program Files (x86)\SumatraPDF\uninstall.exe" /s SumatraPDF-3.1.2-install.exe /s) ELSE (SumatraPDF-3.1.2-install.exe /s) )

Bon entretien de vos machines !

Tuesday, August 11 2015

Déployer silencieusement TightVNC Server sur un parc de machines

TightVNC Server se déploie assez facilement sur un parc de machines Windows à l'aide de la commande :

msiexec /i tightvnc-2.7.10-setup-64bit.msi /quiet /norestart ADDLOCAL="Server" VIEWER_ASSOCIATE_VNC_EXTENSION=1 SERVER_REGISTER_AS_SERVICE=1 SERVER_ADD_FIREWALL_EXCEPTION=1 VIEWER_ADD_FIREWALL_EXCEPTION=1 SERVER_ALLOW_SAS=1 SET_USEVNCAUTHENTICATION=1 VALUE_OF_USEVNCAUTHENTICATION=1 SET_PASSWORD=1 VALUE_OF_PASSWORD=unmotdepasse SET_USECONTROLAUTHENTICATION=1 VALUE_OF_USECONTROLAUTHENTICATION=1 SET_CONTROLPASSWORD=1 VALUE_OF_CONTROLPASSWORD=autremotdepasse

Les paramètres fournis à l'installateur sont assez explicites : on demande au serveur de s'enregistrer comme un service, on paramètre les mots de passe d'accès pour le client mais aussi pour le changement de configuration du serveur...

Le déploiement se passe à merveille avec Updatengine dont nous avons déjà parlé ici :

20150811-tightvnc.png

Wednesday, December 10 2014

Modifier le registre de Windows depuis Linux

Vous connaissiez peut-être chntpw pour modifier le mot de passe d'un utilisateur Windows depuis un LiveCD linux ?

Et bien, bonne nouvelle, chntpw est encore plus puissant que cela : il permet de modifier aussi le registre de Windows depuis un LiveCD (par exemple System Rescue CD qui inclut cet utilitaire par défaut) :

  • on commence bien sûr par monter le disque sur lequel se trouve Windows
  • puis on commence à lire dans la Regedit : chntpw -l /path/to/windows/Windows/system32/config/software
  • pour se rendre dans HKey_Local_Machine/SYSTEM/MountedDevices, on va taper cd HKLMSYSTEMMountedDevices
  • la commande ls va permettre de lister les clés présentes
  • ed key va permettre de modifier ensuite une clé

Bien sûr, prudence dans toute action, il ne faut pas se tromper ! Sauvegardes nécessaires avant d'effectuer des opérations de la sorte. Dans mon cas, cela m'a permis de détruire une association de disque hasardeuse avec le contenu du disque C: automatiquement attribué à la lettre E: ce qui empêchait tout démarrage de Windows (qui n'aime pas démarrer sur E: s'il a été installé sur C: ... il doit y avoir des liens absolus laissés par l'installation !)

Saturday, November 1 2014

Xournal, génial pour annoter des PDFs

Xournal est un très simple et très pratique outil pour annoter des PDFs. Indispensable aujourd'hui quand nous recevons des formulaires par dizaines sous format PDF ou qu'il est habituel de collaborer sur des documents PDF.

L'emploi est fort simple : on ouvre le PDF avec Xournal, on utilise l'un des outils d'écriture ou de dessin (crayon, surligneurs, règle...) pour annoter puis on exporte le nouveau PDF.

Xournal.png

Xournal est disponible au téléchargement ici : http://xournal.sourceforge.net/. Sur Linux, vous le trouverez sans doute dans votre système de paquets, sur Windows, vous pourrez télécharger la petite archive contenant l'exécutable et ses dépendances.

Souhaitant déployer l'outil sur tous les postes informatiques (Windows) de mon entreprise, j'ai fabriqué un installateur simple pour l'outil à l'aide de NSIS. Par défaut, les installateurs de NSIS acceptent d'être appelés en mode silencieux à l'aide du paramètre "/S" et l'installateur généré peut être utilisé pour un déploiement en masse avec un outil comme Updatengine.

Télécharger l'installateur

Testé fonctionnel sur Windows 7 32 bits et 64 bits. xournal-0.4.8-win32-installer.exe

Le code de génération de l'installateur avec NSIS :

!define APPNAME "Xournal"
!define DESCRIPTION "Annotate PDF"
# These three must be integers
!define VERSIONMAJOR 0
!define VERSIONMINOR 4
!define VERSIONBUILD 8
!define INSTALLSIZE 7233
 
RequestExecutionLevel admin ;Require admin rights on NT6+ (When UAC is turned on)
 
InstallDir "$PROGRAMFILES\${APPNAME}"
 
# This will be in the installer/uninstaller's title bar
Name "${APPNAME}"
Icon "xournal.ico"
outFile "xournal-0.4.8-win32-installer.exe"
 
!include LogicLib.nsh
 
# Just 2 pages - install location and installation
page directory
Page instfiles
 
!macro VerifyUserIsAdmin
UserInfo::GetAccountType
pop $0
${If} $0 != "admin" ;Require admin rights on NT4+
        messageBox mb_iconstop "Administrator rights required!"
        setErrorLevel 740 ;ERROR_ELEVATION_REQUIRED
        quit
${EndIf}
!macroend
 
function .onInit
	setShellVarContext all
	!insertmacro VerifyUserIsAdmin
functionEnd
 
section "install"
	# Files for the install directory - to build the installer, these should be in the same directory as the install script (this file)
	setOutPath $INSTDIR
	# Files added here should be removed by the uninstaller (see section "uninstall")
	file "xournal.exe"
	file "xournal.ico"
	file "README.txt"
	file "*.dll"
	file /r "etc"
	file /r "html-doc"
	file /r "lib"
	file /r "pixmaps"
	file /r "share"
	# Add any other files for the install directory (license files, app data, etc) here
 
	# Uninstaller - See function un.onInit and section "uninstall" for configuration
	writeUninstaller "$INSTDIR\uninstall.exe"
 
	# Start Menu
	createDirectory "$SMPROGRAMS\${APPNAME}"
	createShortCut "$SMPROGRAMS\${APPNAME}\${APPNAME}.lnk" "$INSTDIR\xournal.exe" "" "$INSTDIR\xournal.ico"
	createShortCut "$SMPROGRAMS\${APPNAME}\Uninstall ${APPNAME}.lnk" "$INSTDIR\uninstall.exe" "" ""
 
	# Registry information for add/remove programs
	WriteRegStr HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\${APPNAME}" "DisplayName" "${APPNAME} - ${DESCRIPTION}"
	WriteRegStr HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\${APPNAME}" "UninstallString" "$"$INSTDIR\uninstall.exe$""
	WriteRegStr HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\${APPNAME}" "QuietUninstallString" "$"$INSTDIR\uninstall.exe$" /S"
	WriteRegStr HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\${APPNAME}" "InstallLocation" "$"$INSTDIR$""
	WriteRegStr HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\${APPNAME}" "DisplayIcon" "$"$INSTDIR\xournal.ico$""
	WriteRegStr HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\${APPNAME}" "DisplayVersion" "${VERSIONMAJOR}.${VERSIONMINOR}.${VERSIONBUILD}"
	WriteRegDWORD HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\${APPNAME}" "VersionMajor" ${VERSIONMAJOR}
	WriteRegDWORD HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\${APPNAME}" "VersionMinor" ${VERSIONMINOR}
	# There is no option for modifying or repairing the install
	WriteRegDWORD HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\${APPNAME}" "NoModify" 1
	WriteRegDWORD HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\${APPNAME}" "NoRepair" 1
	# Set the INSTALLSIZE constant (!defined at the top of this script) so Add/Remove Programs can accurately report the size
	WriteRegDWORD HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\${APPNAME}" "EstimatedSize" ${INSTALLSIZE}
sectionEnd
 
 
# Uninstaller
function un.onInit
	SetShellVarContext all
 
	#Verify the uninstaller - last chance to back out
	MessageBox MB_OKCANCEL "Permanantly remove ${APPNAME}?" IDOK next
		Abort
	next:
	!insertmacro VerifyUserIsAdmin
functionEnd
 
section "uninstall"
	# Remove Start Menu launcher
	delete "$SMPROGRAMS\${APPNAME}\${APPNAME}.lnk"
	delete "$SMPROGRAMS\${APPNAME}\Uninstall ${APPNAME}.lnk"
	# Try to remove the Start Menu folder - this will only happen if it is empty
	rmDir "$SMPROGRAMS\${APPNAME}"
 
	# Remove files
	delete $INSTDIR\xournal.exe
	delete $INSTDIR\xournal.ico
	delete $INSTDIR\README.txt
	delete $INSTDIR\*.dll
	rmDir /r $INSTDIR\etc
	rmDir /r $INSTDIR\html-doc
	rmDir /r $INSTDIR\lib
	rmDir /r $INSTDIR\pixmaps
	rmDir /r $INSTDIR\share
 
	# Always delete uninstaller as the last action
	delete $INSTDIR\uninstall.exe
 
	# Try to remove the install directory - this will only happen if it is empty
	rmDir $INSTDIR
 
	# Remove uninstaller information from the registry
	DeleteRegKey HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\${APPNAME}"
sectionEnd

Wednesday, March 26 2014

Activer/désactiver une interface réseau à l'aide Powershell

Sous Windows, Powershell est un semblant de terminal Linux qui permet d'obtenir un certain contrôle sur le système d'exploitation. Il est par exemple possible de désactiver/réactiver une interface réseau à l'aide du script suivant :

Disable-NetAdapter "Local Area Connection" -Confirm:$false
Enable-NetAdapter "Local Area Connection"

On pourra exécuter ce script à l'aide de la commande :

powershell C:/script.ps1

où script.ps1 est le nom du fichier contenant le script.

Tuesday, August 6 2013

Réinitialiser un mot de passe administrateur Windows oublié

Il arrive parfois d'oublier un mot de passe administrateur Windows. Si certains outils permettent de le retrouver (Ophcrack), il est beaucoup plus rapide de le ré-initialiser et d'en paramétrer un nouveau au ré-allumage de la machine.

Pour ce faire, nous allons utiliser l'utilitaire 'chntpw' (CHange NT PassWord) qui est inclus dans SystemRescueCD (et sans doute bien d'autres LiveCD destinés aux administrateurs !).

  1. (optionnel) Gravons l'image de SystemRescueCD sur un média vierge (alternativement, placer l'image sur une clé USB permet également de poursuivre sans lecteur optique),
  2. Introduire le CD dans le lecteur optique de l'ordinateur,
  3. Démarrer et laisser SystemRescueCD se charger.

Une fois la distribution prête à l'emploi, on peut commencer les choses sérieuses !

sysreccd.png

Montons d'abord le disque dur où se trouve l'instance de Microsoft Windows (sans doute en NTFS si l'installation de Windows est assez récente) - on prendra bien sûr soin de remplacer /dev/sda1 si nécessaire (par ex. /dev/sda2 s'il s'agit de la deuxième partition du 1er disque dur SATA, /dev/sdb1 s'il s'agit de la première partition d'un second disque SATA) :

ntfs-3g /dev/sda1 /mnt/windows –o force

et rendons-nous dans le dossier Windows/System32/config :

cd /mnt/windows/Windows/System32/config

Dans ce dossier, un fichier SAM doit exister. C'est sur ce fichier que l'utilitaire 'chntpw' va travailler !

chntpw –l SAM

permet de lister les utilisateurs qui disposent d'un compte sur le système.

chntpw –u username SAM

permet de modifier les éléments de connexion pour l'utilisateur au nom 'username'.

chntpw

Différentes options sont proposées : on pourra utiliser le choix (1) pour effacer le mot de passe et pouvoir le modifier à la prochaine connexion sur le poste. Il ne reste alors plus qu'à enregistrer les modifications dans le fichier SAM (en pressant la touche 'y' pour 'Yes' quand la confirmation d'écriture est demandée).

Pour redémarrer, on utilisera la commande :

reboot

Et le tour est joué - voilà l'oubli réparé ! Il nous arrive à tous d'oublier parfois (ou d'avoir entré le mot de passe lors de son initialisation avec un clavier défectueux changé depuis) !

Saturday, July 27 2013

UpdatEngine pour gérer les logiciels d'un parc

J'ai découvert récemment UpdatEngine, logiciel libre codé en Python (et le framework Django pour la partie serveur), pour la gestion des logiciels installés sur un parc de machines. Il existe, certes, d'autres solutions libres pour ce faire mais UpdatEngine m'a séduit par son côté 'simple' (Keep It Simple) et efficace.

J'en suis encore à la phase d'apprentissage de l'outil mais ai déjà procédé à quelques déploiements sur quelques postes et ça fonctionne bien. UpdatEngine ne fait que les mises à jour mais il le fait bien !

A découvrir d'urgence donc si vous gérez un parc de postes (Windows/Linux) !

http://www.updatengine.com/

Monday, July 30 2012

Quand Office 2007 ou 2010 attend les modèles attachés

Tous les documents édités sous Word sont attachés à un modèle ('attached template' dans la langue shakespearienne). Par défaut, il s'agit de Normal.dotx (ou Normal.dot) qui est disponible sur toute machine disposant de la suite Office. Dans certains cas toutefois, les documents sont créés avec des modèles particuliers qui sont attachés au fichier.

Lorsque le fichier est enregistré, il garde donc mémoire de l'emplacement du modèle qui a servi à le faire naître. Et pour une raison que je n'explique pas, il tente d'accéder au modèle à chaque nouvelle ouverture.

Si le modèle de départ est encore accessible, l'opération est tellement rapide qu'elle ne se remarque pas. En revanche, si le modèle a le mauvais goût de se trouver sur un partage réseau inaccessible, alors Microsoft Word essaye de contacter l'emplacement... et laisse l'utilisateur patienter de nombreuses minutes. Le temps d'attente est variable : sur Windows 7 64 bits avec Office 2007 ou 2010 (à jour en date de Juillet 2012), le temps d'attente peut dépasser 2 minutes. Et pire, parfois la main n'est jamais rendue à l'utilisateur. Autant dire que ce comportement est fort handicapant !

Typiquement, on peut se trouver dans cette situation si l'on reçoit un document provenant d'une compagnie qui travaille à partir de modèles stockés sur un serveur centralisé et bien sûr inaccessible au public depuis l'extérieur.

Résoudre le problème du côté de l'émetteur Voici trois méthodes qu'il est possible d'appliquer pour 'détacher' le modèle d'un document (et le remplacer par défaut par le modèle Normal.dotx).

Méthode 1 : activer l'onglet développeur dans les options de la suite Office, puis se rendre dans l'onglet 'développeur' et cliquer sur l'icône 'modèle de document'. Dans la fenêtre qui s'ouvre, il est possible de supprimer le chemin vers le modèle lié ce qui provoque le détachement (et le remplacement par défaut par Normal.dotx).

Méthode 2 : utiliser les outils de préparation en supprimant les infos et méta-données XML présentes dans le document.

Méthode 3 : supprimer manuellement la balise <w:attachedTemplate r:id="string"/> qui se trouve dans les fichiers xml qui forment le document .docx (que l'utilisateur avisé saura ouvrir à l'aide de 7zip par exemple)

Méthode 4 : utiliser une routine scriptée (en langage Visual Basic Application) pour supprimer l'attachement :

myCurrentDoc.AttachedTemplate = ""

Résoudre le problème à la réception A la réception, il est difficile d'agir avant que le fichier ne soit ouvert pour toutes les méthodes mentionnées ci-dessus sauf la dernière. Mais elle n'est pas la plus facile à mettre en oeuvre.

Il existe en revanche une option cachée qui permet de choisir un 'time out' (i.e. un temps maximal d'attente avant abandon) pour l'opération de chargement du modèle attaché... Voici comment paramétrer ce 'time out' à une valeur raisonnable de l'ordre de la seconde pour éviter de n'avoir à attendre plusieurs minutes devant le document avant son ouverture.

Etape 1 : ouvrir le gestionnaire des bases de données "regedit" __ Etape 2 :__ dans Regedit, se rendre dans l'arborescence à

HKEY_CURRENT_USER\Software\Microsoft\Office\14.0\Word\Options

Etape 3 : créer une nouvelle clé de type DWORD

Etape 4 : renommer la clé nouvellement créée en

UseTimeoutForAttachedTemplateLoad

Etape 5 : double-cliquer sur la clé et entrer une valeur décimale pour le "time out" (par ex. 1000 pour 1000ms = 1s)

Etape 6 : fermer Regedit et redémarrer le système (si Office avait déjà été ouvert)

Le temps d'attente à l'ouverture ne devrait désormais plus dépasser la durée choisie !

En espérant que ces astuces vous aideront à gagner quelques minutes très productives !

Sunday, August 28 2011

Windows XP - changer la langue par défaut au démarrage du poste

Il est parfois peu pratique d'avoir un ordinateur démarrant l'OS Windows XP avec la langue anglaise par défaut - notamment car cela peut gêner considérablement la saisie des mots de passe par les utilisateurs non habitués au clavier QWERTY. Heureusement, une immersion en eau profonde dans la base de registre permet de résoudre cela :

  1. Lancer éditeur de la base de registre (regedit.exe)
  2. Se rendre à la clé HKEY_USERS\.DEFAULT\Keyboard Layout\Preload
  3. Double cliquer sur 1 et changer la valeur du paramètre local
  4. Fermer l'éditeur de registre

Voici quelques codes nationaux intéressants (à renseigner dans le paramètre) :

  • > 0000040c = français standard
  • > 00000409 = anglais US
  • > 00000809 = anglais UK

Monday, July 18 2011

L'utilitaire 'mdadm' de Linux est manquant par défaut sous Windows

Vous trouverez sur le net quantité de fiches explicatives sur les bienfaits d'une infrastructure RAID 1 pour protéger ses données d'une éventuelle faille d'un disque dur. Un RAID 1 logiciel se paramètre très facilement sous Linux et le petit outil 'mdadm' permet régulièrement de vérifier l'état du RAID et, en cas d'état dégradé, d'effectuer toute action pour prévenir l'administrateur.



Sous Windows 7 Pro, la situation est un peu différente. La mise en place du RAID se fait sans trop de difficultés, mais en revanche il est impossible d'effectuer un monitoring du RAID ! Autrement dit, par défaut, impossible d'être prévenu si une panne de l'un des disques RAID est survenue... Fonction pourtant essentielle à toute personne soucieuse de l'intégrité de ses données et qui changera un disque défectueux dès que possible. Cette absence de 'monitoring du RAID' est bien dommage... ah qu'il est plaisant d'être sous Linux !

Enfin, sans se laisser démonter, il est possible d'écrire un petit script afin de pallier cette fonctionnalité (diablement importante) manquante. Voici un petit script qui ne se veut ni original ni parfait, mais qui, j'espère, aidera certains d'entre vous à être prévenus des éventuelles failles de vos disques durs.

' Software RAID status check script

Dim WshShell, oExec
Dim Line, RE0, RE1, RE2, RE3
Dim Failed

Failed = -1
' Simple variable to display status of all volumes:
' 0 = Healthy
' 1 = Rebuilding
' 2 = Failed
' 3 = Unknown

Set WshShell = WScript.CreateObject("WScript.Shell")

' Execute the DISKPART program and grab the output
set objShell = WScript.CreateObject("WScript.Shell")
set objExec = objShell.Exec("diskpart.exe")
strOutput = ExecuteDiskPartCommand("list volume")

WScript.StdOut.WriteLine(strOutput)

' Set up some regular expression objects
Set RE0 = New RegExp
Set RE1 = New RegExp
Set RE2 = New RegExp
Set RE3 = New RegExp

RE0.Pattern = "Sain"
RE1.Pattern = "Volume"
RE2.Pattern = "chou"
RE3.Pattern = "Reconstui"

        Line = strOutput

        ' Tests for Mirrored or RAID-5 volumes
        If RE1.Test(Line) Then

          ' Tests for Healthy volumes
          If RE0.Test(Line) Then
            If Failed = -1 Then Failed = 0
          End If

          If RE3.Test(Line) Then
            Failed = 1
          End If

          ' Tests for Failed RAID volumes
          If RE2.Test(Line) Then
            If Failed < 2 Then Failed = 2
          End If
        End If

' If Failed is still -1, something bad has happened, or there is no RAID
If Failed = -1 Then Failed = 3

' Print out the appropriate test result
Select Case Failed
    Case 0
      WScript.StdOut.WriteLine("RAID OK: All volumes Healthy")
    Case 1
      WScript.StdOut.WriteLine("RAID WARNING: Volume(s) Rebuilding")
    MsgBox "Le RAID est en reconstruction.",vbExclamation
    Case 2
      WScript.StdOut.WriteLine("RAID CRITICAL: Volume(s) have Failed")
    MsgBox "Il semble que le RAID soit en panne !!! ATTENTION ATTENTION !!",vbExclamation
    Case 3
      WScript.StdOut.WriteLine("UNKNOWN !")
    MsgBox "Il n'est pas possible d'évaluer l'état du RAID - une vérification manuelle s'impose !",vbExclamation
End Select

ExitDiskPart
WScript.Quit(Failed)

Function ExecuteDiskPartCommand (strCommand)

    ' Run the command we want
    objExec.StdIn.Write strCommand & VbCrLf

    ' If we read the output now, we will get the one from previous command (?). As we will always
    ' run a dummy command after every valid command, we can safely ignore this

    Do While True
        IgnoreThis = objExec.StdOut.ReadLine & vbcrlf
        ' Command finishes when diskpart prompt is shown again
        If InStr(IgnoreThis, "DISKPART>") <> 0 Then Exit Do
    Loop

    ' Run a dummy command, so the next time we call this function and try to read output,
    ' we can safely ignore the result
    objExec.StdIn.Write VbCrLf

    ' Read command's output
    ExecuteDiskPartCommand = ""
    Do While True
        ExecuteDiskPartCommand = ExecuteDiskPartCommand & objExec.StdOut.ReadLine & vbcrlf
        ' Command finishes when diskpart prompt is shown again
        If InStr(ExecuteDiskPartCommand, "DISKPART>") <> 0 Then Exit Do
    Loop
End Function


Sub ExitDiskPart
    ' Run exit command to exit the tool
    objExec.StdIn.Write "exit" & VbCrLf
End Sub 

Sunday, May 8 2011

Amélioration d'Outlook par l'utilisateur

Mozilla Thunderbird 3.0 est sans conteste un très bon lecteur de courriel. Malheureusement, il est des situations dans lesquelles il n'est pas possible de l'utiliser - par exemple quand l'emploi de Microsoft Outlook 2007 est préconisé dans une entreprise.

Il faut alors faire contre mauvaise fortune bon coeur ! Toutefois, il est très ennuyeux que Microsoft Outlook 2007 ne se formalise pas lors d'un envoi de courriel sans objet ! Thunderbird, lui, sait vous alerter et vous demander confirmation avant envoi.

Heureusement, tout n'est pas perdu et l'ajout de scripts est possible pour améliorer les fonctionnalités d'Outlook. Voici donc une petite astuce (découverte ici : http://lika.be/wp/2007/03/outlook-email-blank-subject-warning/) pour qu'Outlook réagisse en cas d'envoi de courriel sans objet.

- Ouvrir le mode développeur Visual Basic (Alt + F11). - Ouvrir l'explorateur d'objets et trouver l'objet nommé 'ThisOutlookSession'. - Double-cliquer sur cet objet - une fenêtre d'édition de code s'ouvre. - Ajouter le code suivant :

Private Sub Application_ItemSend(ByVal Item As Object, Cancel As Boolean)
Dim bCancelSend As Boolean

If Item.Subject = "" Then
bCancelSend = MsgBox("Le message n'a pas d'objet.” & vbNewLine & _
"Souhaitez-vous l'envoyer malgré tout ?", _
vbYesNo + vbExclamation, “No Subject”) = vbNo
End If

Cancel = bCancelSend

End Sub

- Enregistrer et redémarrer Outlook. Outlook signale qu'un script non signé est disponible, l'accepter et désormais le problème est réglé - Outlook vous demande confirmation avant l'envoi d'un courriel sans objet.

Enfin, pour éviter l'impertinente question du démarrage, il est possible de signer le script personnalisé. Là-encore, je m'inspire de cette page : http://www.howto-outlook.com/howto/selfcert.htm.

- Lancer la programme SelfCert.exe qui se trouve dans le dossier d'installation d'Office. - Suivre les instructions à l'écran pour créer un certificat auto-signé. - Dans Outlook, retourner dans l'éditeur Visual Basic (Alt+F11) et choisir le menu 'Outils - Signature électronique'. - Sélectionner le certificat que vous venez de créer pour le script, enregistrer et fermer. - Au prochain redémarrage d'Outlook, spécifier que vous faîtes confiance à l'auteur du certificat et le tour est joué.

Voilà une fonction bien utile ajoutée à Outlook !