PAB's blog - Tag - windows2022-11-19T07:02:34+00:00urn:md5:5926f7e05a689ea9af53f3d15057feb6DotclearUpdatengine : désinstaller un logiciel avant d'en installer un nouveauurn:md5:18ec81661a2aed44e6ce359e9ee9173f2016-08-26T07:14:00+02:002016-08-26T06:45:40+02:00Pierre-Alain Blinuxplanet-libreupdatenginewindows <p>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.</p>
<p>Récemment, j'ai cherché à désinstaller un logiciel avant d'en installer la mise à jour.</p>
<h3>Possibilité 1 : le logiciel est déployé avec Windows Installer</h3>
<p>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 à :</p>
<pre>
wmic product where "name like 'Logiciel%'" call uninstall
logiciel-nouvelle-version.exe /s
section_end
download_no_restart
</pre>
<p>Par exemple, pour désinstaller les anciennes versions de Java avant d'en installer une nouvelle, on pourra utiliser :</p>
<pre>
wmic product where "name like 'Java%'" call uninstall
jre-8u101-windows-x64.exe /s
section_end
download_no_restart
</pre>
<h3>Possibilité 2 : s'il n'est pas visible/désinstallable avec WMIC</h3>
<p>On peut alors simplement exécuter le désinstallateur (à condition d'en connaître le chemin) :</p>
<pre>
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) )
</pre>
<p>Par exemple pour SumatraPDF, lecteur PDF libre pour Windows, cela pourra devenir :</p>
<pre>
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) )
</pre>
<p>Bon entretien de vos machines !</p>Déployer silencieusement TightVNC Server sur un parc de machinesurn:md5:a8e17351e6375c6b4ca3bfce4817d2512015-08-11T08:48:00+02:002015-08-11T07:49:11+02:00Pierre-Alain Badminsysinformatiqueupdatenginewindows <p>TightVNC Server se déploie assez facilement sur un parc de machines Windows à l'aide de la commande :</p>
<pre>
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
</pre>
<p>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...</p>
<p>Le déploiement se passe à merveille avec Updatengine dont nous avons déjà parlé <a href="https://blog.bandinelli.net/index.php?post/2013/07/27/UpdatEngine-pour-g%C3%A9rer-les-logiciels-d-un-parc">ici</a> :</p>
<p><img src="https://blog.bandinelli.net/public/20150811-tightvnc.png" alt="20150811-tightvnc.png" style="display:block; margin:0 auto;" title="20150811-tightvnc.png, août 2015" /></p>Modifier le registre de Windows depuis Linuxurn:md5:0d03e2133efd1614b9da5c6e02415a8e2014-12-10T06:23:00+01:002014-12-10T06:40:17+01:00Pierre-Alain Badminsyslinuxwindows <p>Vous connaissiez peut-être <em>chntpw</em> pour modifier le mot de passe d'un utilisateur Windows depuis un LiveCD linux ?</p>
<p>Et bien, bonne nouvelle, <em>chntpw</em> 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) :</p>
<ul>
<li>on commence bien sûr par monter le disque sur lequel se trouve Windows</li>
<li>puis on commence à lire dans la Regedit : <em>chntpw -l /path/to/windows/Windows/system32/config/software</em></li>
<li>pour se rendre dans <em>HKey_Local_Machine/SYSTEM/MountedDevices</em>, on va taper <em>cd HKLMSYSTEMMountedDevices</em></li>
<li>la commande <em>ls</em> va permettre de lister les clés présentes</li>
<li><em>ed key</em> va permettre de modifier ensuite une clé</li>
</ul>
<p>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 !)</p>Xournal, génial pour annoter des PDFsurn:md5:383744378fac77694416d95148bb03c72014-11-01T07:59:00+01:002014-11-01T08:00:59+01:00Pierre-Alain Binformatiquemultimédiaplanet-libreupdatenginewindows <p>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.</p>
<p>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.</p>
<p><img src="https://blog.bandinelli.net/public/Xournal.png" alt="Xournal.png" style="display:block; margin:0 auto;" title="Xournal.png, nov. 2014" /></p>
<p>Xournal est disponible au téléchargement ici : <a href="http://xournal.sourceforge.net/" title="http://xournal.sourceforge.net/">http://xournal.sourceforge.net/</a>. 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.</p>
<p>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 <a href="http://nsis.sourceforge.net/" title="http://nsis.sourceforge.net/">NSIS</a>. 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 <a href="https://blog.bandinelli.net/index.php?post/2013/07/27/UpdatEngine-pour-g%C3%A9rer-les-logiciels-d-un-parc" title="Updatengine">Updatengine</a>.</p>
<h3>Télécharger l'installateur</h3>
<p>Testé fonctionnel sur Windows 7 32 bits et 64 bits.
<a href="https://blog.bandinelli.net/public/xournal-0.4.8-win32-installer.exe" title="Updatengine">xournal-0.4.8-win32-installer.exe</a></p>
<h3>Le code de génération de l'installateur avec NSIS :</h3>
<pre>
!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
</pre>Activer/désactiver une interface réseau à l'aide Powershellurn:md5:616cc974cb0681b104608bd1a3a0abb02014-03-26T10:03:00+01:002014-03-30T16:58:58+02:00Pierre-Alain Bpowershellwindows <p>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 :</p>
<pre>
Disable-NetAdapter "Local Area Connection" -Confirm:$false
Enable-NetAdapter "Local Area Connection"
</pre>
<p>On pourra exécuter ce script à l'aide de la commande :</p>
<pre>
powershell C:/script.ps1
</pre>
<p>où script.ps1 est le nom du fichier contenant le script.</p>Réinitialiser un mot de passe administrateur Windows oubliéurn:md5:fb7eb73825d2100dd8ffd24a73a6c2c52013-08-06T11:06:00+02:002013-08-06T10:17:01+02:00Pierre-Alain Bsystemrescuecdwindows <p>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.</p>
<p>Pour ce faire, nous allons utiliser l'utilitaire 'chntpw' (CHange NT PassWord) qui est inclus dans <a href="http://www.sysresccd.org">SystemRescueCD</a> (et sans doute bien d'autres LiveCD destinés aux administrateurs !).</p>
<ol>
<li>(optionnel) Gravons l'image de SystemRescueCD sur un média vierge (alternativement, <a href="http://www.sysresccd.org/Sysresccd-manual-en_How_to_install_SystemRescueCd_on_an_USB-stick">placer l'image sur une clé USB</a> permet également de poursuivre sans lecteur optique),</li>
<li>Introduire le CD dans le lecteur optique de l'ordinateur,</li>
<li>Démarrer et laisser SystemRescueCD se charger.</li>
</ol>
<p>Une fois la distribution prête à l'emploi, on peut commencer les choses sérieuses !</p>
<p><img src="https://blog.bandinelli.net/public/.sysreccd_m.jpg" alt="sysreccd.png" title="sysreccd.png, août 2013" /></p>
<p>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) :</p>
<pre>
ntfs-3g /dev/sda1 /mnt/windows –o force
</pre>
<p>et rendons-nous dans le dossier Windows/System32/config :</p>
<pre>
cd /mnt/windows/Windows/System32/config
</pre>
<p>Dans ce dossier, un fichier SAM doit exister. C'est sur ce fichier que l'utilitaire 'chntpw' va travailler !</p>
<pre>
chntpw –l SAM
</pre>
<p>permet de lister les utilisateurs qui disposent d'un compte sur le système.</p>
<pre>
chntpw –u username SAM
</pre>
<p>permet de modifier les éléments de connexion pour l'utilisateur au nom 'username'.</p>
<p><img src="https://blog.bandinelli.net/public/.chntpw_m.jpg" alt="chntpw" title="chntpw, août 2013" /></p>
<p>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).</p>
<p>Pour redémarrer, on utilisera la commande :</p>
<pre>
reboot
</pre>
<p>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) !</p>UpdatEngine pour gérer les logiciels d'un parcurn:md5:cdb2326c539b58d4e745bde66cd57cae2013-07-27T10:11:00+02:002013-07-27T09:12:07+02:00Pierre-Alain Blinuxwindows <p>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.</p>
<p>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 !</p>
<p>A découvrir d'urgence donc si vous gérez un parc de postes (Windows/Linux) !</p>
<p><a href="http://www.updatengine.com/" title="http://www.updatengine.com/">http://www.updatengine.com/</a></p>Quand Office 2007 ou 2010 attend les modèles attachésurn:md5:5f1140b5312b6d0d26a2d095c9591ab42012-07-30T21:18:00+02:002015-07-27T12:55:27+02:00Pierre-Alain Binformatiqueofficewindows <p>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.</p>
<p>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.</p>
<p>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 !</p>
<p>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.</p>
<p><strong>Résoudre le problème du côté de l'émetteur</strong>
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).</p>
<p><strong>Méthode 1 :</strong> 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).</p>
<p><strong>Méthode 2 :</strong> utiliser les outils de préparation en supprimant les infos et méta-données XML présentes dans le document.</p>
<p><strong>Méthode 3 :</strong> 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)</p>
<p><strong>Méthode 4 :</strong> utiliser une routine scriptée (en langage Visual Basic Application) pour supprimer l'attachement :</p>
<pre>
myCurrentDoc.AttachedTemplate = ""
</pre>
<p><strong>Résoudre le problème à la réception</strong>
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.</p>
<p>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.</p>
<p><strong>Etape 1 :</strong> ouvrir le gestionnaire des bases de données "regedit"
__
Etape 2 :__ dans Regedit, se rendre dans l'arborescence à</p>
<pre>
HKEY_CURRENT_USER\Software\Microsoft\Office\14.0\Word\Options
</pre>
<p><strong>Etape 3 :</strong> créer une nouvelle clé de type DWORD</p>
<p><strong>Etape 4 :</strong> renommer la clé nouvellement créée en</p>
<pre>
UseTimeoutForAttachedTemplateLoad
</pre>
<p><strong>Etape 5 :</strong> double-cliquer sur la clé et entrer une valeur décimale pour le "time out" (par ex. 1000 pour 1000ms = 1s)</p>
<p><strong>Etape 6 :</strong> fermer Regedit et redémarrer le système (si Office avait déjà été ouvert)</p>
<p>Le temps d'attente à l'ouverture ne devrait désormais plus dépasser la durée choisie !</p>
<p>En espérant que ces astuces vous aideront à gagner quelques minutes très productives !</p>Windows XP - changer la langue par défaut au démarrage du posteurn:md5:e475ac5438e75a66639a97a63b5891bc2011-08-28T21:35:00+02:002011-08-28T20:36:02+02:00Pierre-Alain Binformatiquewindows <p>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 :</p>
<ol>
<li>Lancer éditeur de la base de registre (regedit.exe)</li>
<li>Se rendre à la clé HKEY_USERS\.DEFAULT\Keyboard Layout\Preload</li>
<li>Double cliquer sur 1 et changer la valeur du paramètre local</li>
<li>Fermer l'éditeur de registre</li>
</ol>
<p>Voici quelques codes nationaux intéressants (à renseigner dans le paramètre) :</p>
<ul>
<li>> 0000040c = français standard</li>
<li>> 00000409 = anglais US</li>
<li>> 00000809 = anglais UK</li>
</ul>L'utilitaire 'mdadm' de Linux est manquant par défaut sous Windowsurn:md5:0b578e2496d1f05a87837b98d97f47ce2011-07-18T22:31:00+02:002011-08-28T20:55:55+02:00Pierre-Alain BinformatiqueRAIDwindows <p>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.</p>
<pre></pre>
<p>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 !</p>
<p>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.</p>
<pre>
' 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
</pre>Amélioration d'Outlook par l'utilisateururn:md5:223071952e879392afca9d29fd8d98652011-05-08T11:12:00+02:002011-05-08T10:24:15+02:00Pierre-Alain Binformatiquewindows <p>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.</p>
<p>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.</p>
<p>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 : <a href="http://lika.be/wp/2007/03/outlook-email-blank-subject-warning/">http://lika.be/wp/2007/03/outlook-email-blank-subject-warning/</a>) pour qu'Outlook réagisse en cas d'envoi de courriel sans objet.</p>
<p>- 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 :</p>
<pre>
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
</pre>
<p>- 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.</p>
<p>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 : <a href="http://www.howto-outlook.com/howto/selfcert.htm">http://www.howto-outlook.com/howto/selfcert.htm</a>.</p>
<p>- 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é.</p>
<p>Voilà une fonction bien utile ajoutée à Outlook !</p>