Connaître son IP publique en bash

Un petit script tout simple, mais qui peut rendre bien des services.

#!/bin/bash
wget http://checkip.dyndns.org/ -O - -o /dev/null | awk '{ print  $6 }' | cut -d "<" -f 1

DynDNS est un service permettant notamment de disposer d’un domaine pointant toujours vers votre adresse IP, même si cette dernière est dynamique.



 Microsoft Dynamics CRM 4.0 : implémentation non validée FIPS ?

Microsoft Dynamics CRM

« Cette implémentation ne fait pas partie des algorithmes de chiffrement
validés FIPS pour les plates-formes Windows. »

Hum, c’est embarassant… [*]

Cette erreur bloquante survient à la fin de l’installation de Dynamics CRM 4.0. Ceux qui ont déjà installé ce produit comprennent déjà le désarroi causé par cette erreur : avant d’arriver à ce stade de l’installation, il a fallu passer par l’installation de Windows, d’Active Directory, de IIS, du serveur DNS, de SQL Server… soit environ 3 heures de temps. Vraiment rageant.

Mais une solution existe, même si le message d’erreur fourni par Windows n’est pas des plus compréhensibles. Une fois la solution appliquée, il ne vous restera plus qu’à désinstaller Dynamics CRM, supprimer les bases de données créées sur SQL Server (MSCRM_CONFIG et Organisation_MSCRM), et… relancer l’installation de Dynamics CRM.

Sous Windows XP / 2003 :

Ouvrez l’éditeur de registre et positionnez-vous sur la clé suivante :

[HKEY_LOCAL_MACHINE\System\CurrentControlSet\Control\Lsa]

Passez la valeur DWORD « FIPSAlgorithmPolicy » à 0.

Sous Windows Vista / 2008 :

Ouvrez l’éditeur de registre et positionnez-vous sur la clé suivante :

[HKEY_LOCAL_MACHINE\System\CurrentControlSet\Control\Lsa\Enabled]

Passez la valeur DWORD « FIPSAlgorithmPolicy » à 0.

 

[*] : Petit clin d’oeil à Firefox



 Utiliser la date de la veille de façon simple, en batch

« Bah, il suffit juste de retirer 1 à la date du jour… »

Moui… mais non. Ce n’est pas en retirant 1 au 1er janvier que ça nous donnera la date du 31 décembre.

Il existe sur Internet une multitude de solutions diverses, comme de gros scripts batch ou de simples scripts VBS. La solution que j’utilise n’est peut-être pas la meilleure, mais a le mérite d’être simple à mettre en place, simple à comprendre, et facilement adaptable.

Le principe est le suivant :

JOUR 0

- enregistrer la date du jour dans un fichier X (contiendra la date du jour 0)

JOUR 1

- récupérer le contenu du fichier X (contient la date du jour 0)
- remplacer le contenu du fichier X (contiendra la date du jour 1)

JOUR 2

- récupérer le contenu du fichier X (contient la date du jour 1)
- remplacer le contenu du fichier X (contiendra la date du jour 2)

Et ainsi de suite. Les fins de semaine, jours fériés et chômés ne sont pas une difficulté tant que le fichier X est écrasé après chaque journée d’utilisation et non pas de manière automatique. Ainsi, dans le cas d’un traitement du lundi au vendredi, le fichier X contiendra le lundi la date du vendredi.

Passons à la pratique.

Insertion de la date :

@echo off
echo %date% > %TEMP%\date_veille.txt
exit

A noter que vous pouvez adapter la date en fonction de vos envies :

- en retirant les slashs (echo %date:/=%),
- en remplaçant les slashs par des tirets (echo %date:/=-%),
- en changeant l’ordre pour année/mois/jour (echo %date:~6%/%date:~3,2%/%date:~0,2%)
- …

Récupération de la date :

@echo off
for /f "delims=" %%a in ('type %TEMP%\date_veille.txt') do set date_veille=%%a
echo La date de la veille est : %date_veille%
echo.
pause
exit

Il existe toutefois une alternative : placer la date du jour dans une variable… et mettre le script en pause, via un énorme sleep, jusqu’à l’utilisation du lendemain. Mais avoir un script lancé pendant peut-être plus de 10 heures n’est pas forcément une bonne idée…



 Manipuler des noms de fichiers / chemins en batch

Comment faire pour exécuter des traitements dans un script .bat en fonction du nom du fichier ou de son chemin ? Il existe différentes variables prévues à cet effet, dont l’une était utilisée dans un article précédent.

Prenons comme exemple un script test.bat situé dans C:\Documents and Settings\nicolas\.

echo %~d0

Renvoie la lettre du lecteur (C:).

echo %~nx0

Renvoie le nom du fichier et son extension (test.bat).

echo %~x0

Renvoie l’extension du fichier (.bat).

echo %~f0

Renvoie le chemin complet au format long (C:\Documents and Settings\nicolas\test.bat).

echo %~sf0

Renvoie le chemin complet au format court (C:\DOCUME~1\nicolas\test.bat).

echo %~p0

Renvoie le chemin au format long sans le nom du fichier ni la lettre du lecteur (\Documents and Settings\nicolas\).

echo %~dp0

Renvoie le chemin au format long sans le nom du fichier (C:\Documents and Settings\nicolas\).

echo %~sp0

Renvoie le chemin au format court sans le nom du fichier ni la lettre du lecteur (\DOCUME~1\nicolas\).

Pour mettre en pratique, voici un script reprenant certaines de ces variables afin de tester le bon fonctionnement.

@echo off
echo Le fichier se nomme   : %~nx0
echo Son extension est     : %~x0
echo Il est lance depuis   : %~d0
echo Le chemin complet est : %~f0
echo.
pause
exit

Et voici le résultat :

Le fichier se nomme   : test.bat
Son extension est     : .bat
Il est lance depuis   : C:
Le chemin complet est : C:\Documents and Settings\nicolas\test.bat
 
Appuyez sur une touche pour continuer...


 Modifier une série d’extensions de fichiers en bash

C’est court, pas difficile à trouver, mais c’est toujours intéressant de le garder sous la main pour le jour où on en a besoin…

Dans cet exemple, les fichiers .JPEG sont renommés en .jpg.

for i in *.JPEG
do
mv "${i}" "${i%JPEG}jpg"
done

Le résultat :

[nicolas@mobile temp]$ touch a.JPEG b.JPEG c.JPEG
[nicolas@mobile temp]$ ls
a.JPEG  b.JPEG  c.JPEG
[nicolas@mobile temp]$ for i in *.JPEG
> do
> mv "${i}" "${i%JPEG}jpg"
> done
[nicolas@mobile temp]$ ls
a.jpg  b.jpg  c.jpg
[nicolas@mobile temp]$