Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

Script de test pour lancer une action

14 réponses
Avatar
Eric Galais
Bonjour,

Je suis une super quiche en dev et je cherche à faire un script de test pour
lancer une copie, je m'explique:
je dois sauvegarder des données sur des portables qui peuvent changer de
site dans une meme société. Genre portable de X qui bosse sur Paris vas
aller sur le site de la société qui est à lorient.
je veux lancer ma synchro que lorsqu'il est sur le site principal pour
éviter de bouffer la bande passante entre Lorient et Paris.
J'ai commancé à bidouiller un script en batch mais je n'abouti a rien de
concret.

Le site de Paris a une classe d'adresse spécifique et celui de Lorient
aussi, genre 170.1.10.X et 180.1.100.X

Mon souhait serait de faire ce script en VBS mais mes connaissances sont
super limitées.
Auriez vous des bribes de codes qui pourraient m'intéresser ou un exemple
dont je pourrais m'inspirer?

Merci d'avance.

Eric

10 réponses

1 2
Avatar
Gilles LAURENT
"Eric Galais" a écrit dans le message de
news:
| Bonjour,

Bonjour,

| Je suis une super quiche en dev et je cherche à faire un script de
| test pour lancer une copie, je m'explique:
| je dois sauvegarder des données sur des portables qui peuvent
| changer de site dans une meme société. Genre portable de X qui bosse
| sur Paris vas aller sur le site de la société qui est à lorient.
| je veux lancer ma synchro que lorsqu'il est sur le site principal pour
| éviter de bouffer la bande passante entre Lorient et Paris.
| J'ai commancé à bidouiller un script en batch mais je n'abouti a rien
| de concret.
|
| Le site de Paris a une classe d'adresse spécifique et celui de Lorient
| aussi, genre 170.1.10.X et 180.1.100.X
|
| Mon souhait serait de faire ce script en VBS mais mes connaissances
| sont super limitées.
| Auriez vous des bribes de codes qui pourraient m'intéresser ou un
| exemple dont je pourrais m'inspirer?
|
| Merci d'avance.
|
| Eric

L'idée consiste à extraire les octets de l'adresse IP du poste puis de
comparer l'identificateur de réseau avec celui du site principal.
L'identificateur de réseau du site principal est contenu dans la
variable d'environnement 'mainSiteNetId'. Le pré requis consiste donc à
définir au préalable la variable d'environnement 'mainSiteNetId' avec
comme valeur 170 pour le site de Paris et 180 pour le site de Lorient.

Si le poste est connecté sur son site principal alors la synchronisation
pourra par exemple être réalisée avec l'outil du Resource Kit Microsoft
robocopy téléchargeable en suivant le lien ci-dessous :
http://www.microsoft.com/downloads/details.aspx?familyid467a69-57ff-4ae7-96ee-b18c4790cffd&displaylang=en

Ci dessous le script batch sync.cmd permettant de déclencher la
synchronisation uniquement si le poste est connecté sur son site
principal (testé avec XP SP1/SP2 FR) :

-- Couper ici : sync.cmd --

@echo off

:: Extraction des octets (j,k,l,m) de l'adresse IP de la
:: première interface réseau configurée
for /f "tokens" %%i in ('ipconfig ^| find /i "Adresse IP"') do (
for /f "delims=. tokens=1-4" %%j in ('echo %%i') do (
echo Adresse IP : %%j %%k %%l %%m
set netId=%%j
goto :_sync
)
)

:: synchronisation des données uniquement si le poste est connecté
:: sur son site principal. L'appartenance au site principal est
:: déterminée à l'aide de la variable d'environnement 'mainSiteNetId'
:_sync
if "%mainSiteNetId%" NEQ "%netId%" goto :eof

:: le poste est connecté sur son site principal
:: la synchronisation peut être lancée
echo synchronisation en cours ...

-- Couper ici : sync.cmd --

Bonne mise en oeuvre :-)

--
Gilles LAURENT
Me contacter : http://cerbermail.com/?zoTY7ZkLcD
Avatar
Eric Galais
Un grand merci, je vais tester ca de suite :)

"Gilles LAURENT" a écrit dans le message de news:

"Eric Galais" a écrit dans le message de
news:
| Bonjour,

Bonjour,

| Je suis une super quiche en dev et je cherche à faire un script de
| test pour lancer une copie, je m'explique:
| je dois sauvegarder des données sur des portables qui peuvent
| changer de site dans une meme société. Genre portable de X qui bosse
| sur Paris vas aller sur le site de la société qui est à lorient.
| je veux lancer ma synchro que lorsqu'il est sur le site principal pour
| éviter de bouffer la bande passante entre Lorient et Paris.
| J'ai commancé à bidouiller un script en batch mais je n'abouti a rien
| de concret.
|
| Le site de Paris a une classe d'adresse spécifique et celui de Lorient
| aussi, genre 170.1.10.X et 180.1.100.X
|
| Mon souhait serait de faire ce script en VBS mais mes connaissances
| sont super limitées.
| Auriez vous des bribes de codes qui pourraient m'intéresser ou un
| exemple dont je pourrais m'inspirer?
|
| Merci d'avance.
|
| Eric

L'idée consiste à extraire les octets de l'adresse IP du poste puis de
comparer l'identificateur de réseau avec celui du site principal.
L'identificateur de réseau du site principal est contenu dans la
variable d'environnement 'mainSiteNetId'. Le pré requis consiste donc à
définir au préalable la variable d'environnement 'mainSiteNetId' avec
comme valeur 170 pour le site de Paris et 180 pour le site de Lorient.

Si le poste est connecté sur son site principal alors la synchronisation
pourra par exemple être réalisée avec l'outil du Resource Kit Microsoft
robocopy téléchargeable en suivant le lien ci-dessous :
http://www.microsoft.com/downloads/details.aspx?familyid467a69-57ff-4ae7-96ee-b18c4790cffd&displaylang=en

Ci dessous le script batch sync.cmd permettant de déclencher la
synchronisation uniquement si le poste est connecté sur son site
principal (testé avec XP SP1/SP2 FR) :

-- Couper ici : sync.cmd --

@echo off

:: Extraction des octets (j,k,l,m) de l'adresse IP de la
:: première interface réseau configurée
for /f "tokens" %%i in ('ipconfig ^| find /i "Adresse IP"') do (
for /f "delims=. tokens=1-4" %%j in ('echo %%i') do (
echo Adresse IP : %%j %%k %%l %%m
set netId=%%j
goto :_sync
)
)

:: synchronisation des données uniquement si le poste est connecté
:: sur son site principal. L'appartenance au site principal est
:: déterminée à l'aide de la variable d'environnement 'mainSiteNetId'
:_sync
if "%mainSiteNetId%" NEQ "%netId%" goto :eof

:: le poste est connecté sur son site principal
:: la synchronisation peut être lancée
echo synchronisation en cours ...

-- Couper ici : sync.cmd --

Bonne mise en oeuvre :-)

--
Gilles LAURENT
Me contacter : http://cerbermail.com/?zoTY7ZkLcD




Avatar
Eric Galais
C'est exactement la démarche que je recherchais à une chose près; je lance
le batch sur le serveur donc pas un ipconfig mais un ping pour le test. Il
faut donc que je revois presque entièrement le batch parce que les critères
de récupération sont plus bon avec un Ping.

En tout cas je ne navigue plus dans le noir, merci :)
"Eric Galais" a écrit dans le message de news:

Un grand merci, je vais tester ca de suite :)

"Gilles LAURENT" a écrit dans le message de news:

"Eric Galais" a écrit dans le message de
news:
| Bonjour,

Bonjour,

| Je suis une super quiche en dev et je cherche à faire un script de
| test pour lancer une copie, je m'explique:
| je dois sauvegarder des données sur des portables qui peuvent
| changer de site dans une meme société. Genre portable de X qui bosse
| sur Paris vas aller sur le site de la société qui est à lorient.
| je veux lancer ma synchro que lorsqu'il est sur le site principal pour
| éviter de bouffer la bande passante entre Lorient et Paris.
| J'ai commancé à bidouiller un script en batch mais je n'abouti a rien
| de concret.
|
| Le site de Paris a une classe d'adresse spécifique et celui de Lorient
| aussi, genre 170.1.10.X et 180.1.100.X
|
| Mon souhait serait de faire ce script en VBS mais mes connaissances
| sont super limitées.
| Auriez vous des bribes de codes qui pourraient m'intéresser ou un
| exemple dont je pourrais m'inspirer?
|
| Merci d'avance.
|
| Eric

L'idée consiste à extraire les octets de l'adresse IP du poste puis de
comparer l'identificateur de réseau avec celui du site principal.
L'identificateur de réseau du site principal est contenu dans la
variable d'environnement 'mainSiteNetId'. Le pré requis consiste donc à
définir au préalable la variable d'environnement 'mainSiteNetId' avec
comme valeur 170 pour le site de Paris et 180 pour le site de Lorient.

Si le poste est connecté sur son site principal alors la synchronisation
pourra par exemple être réalisée avec l'outil du Resource Kit Microsoft
robocopy téléchargeable en suivant le lien ci-dessous :
http://www.microsoft.com/downloads/details.aspx?familyid467a69-57ff-4ae7-96ee-b18c4790cffd&displaylang=en

Ci dessous le script batch sync.cmd permettant de déclencher la
synchronisation uniquement si le poste est connecté sur son site
principal (testé avec XP SP1/SP2 FR) :

-- Couper ici : sync.cmd --

@echo off

:: Extraction des octets (j,k,l,m) de l'adresse IP de la
:: première interface réseau configurée
for /f "tokens" %%i in ('ipconfig ^| find /i "Adresse IP"') do (
for /f "delims=. tokens=1-4" %%j in ('echo %%i') do (
echo Adresse IP : %%j %%k %%l %%m
set netId=%%j
goto :_sync
)
)

:: synchronisation des données uniquement si le poste est connecté
:: sur son site principal. L'appartenance au site principal est
:: déterminée à l'aide de la variable d'environnement 'mainSiteNetId'
:_sync
if "%mainSiteNetId%" NEQ "%netId%" goto :eof

:: le poste est connecté sur son site principal
:: la synchronisation peut être lancée
echo synchronisation en cours ...

-- Couper ici : sync.cmd --

Bonne mise en oeuvre :-)

--
Gilles LAURENT
Me contacter : http://cerbermail.com/?zoTY7ZkLcD








Avatar
Gilles LAURENT
"Eric Galais" a écrit dans le message de
news:
| C'est exactement la démarche que je recherchais à une chose près; je
| lance le batch sur le serveur donc pas un ipconfig mais un ping pour
| le test. Il faut donc que je revois presque entièrement le batch
| parce que les critères de récupération sont plus bon avec un Ping.
|
| En tout cas je ne navigue plus dans le noir, merci :)

Bonjour,

Ci dessous le script batch sync.cmd permettant de déclencher la
synchronisation uniquement si le poste est connecté sur son site
principal (testé avec XP SP1/SP2 FR). Cette fois-ci, le script s'exécute
coté serveur :

-- Couper ici : sync.cmd --

@echo off

:: Initialisation
set netId
:: Extraction des octets (j,k,l,m) de l'adresse IP du poste client
:: L'adresse IP est retournée via un Ping en utilisant le nom de hôte
:: spécifié comme premier argument
for /f "tokens=3" %%i in ('ping /n 1 %1 ^| find /i "ponse de"') do (
for /f "delims=.: tokens=1-4" %%j in ('echo %%i') do (
echo Adresse IP : %%j %%k %%l %%m
set netId=%%j
)
)

:: synchronisation des données uniquement si le poste est connecté
:: sur son site principal. L'appartenance au site principal est
:: déterminée à l'aide de l'identificateur de réseau spécifié comme
:: second argument
:_sync
if "%2" NEQ "%netId%" goto :eof

:: le poste est connecté sur son site principal
:: la synchronisation peut être lancée
echo synchronisation en cours ...

-- Couper ici : sync.cmd --

Ce script supporte deux arguments. Le premier est la nom de hôte
(netbios ou DNS) du poste client et le deuxième est l'identificateur de
réseau du site principal. Par exemple, pour déclencher la
synchronisation des données du poste PC001 si et seulement si celui-ci
se situe sur le site de Paris :
>sync.cmd PC001 170

--
Gilles LAURENT
Me contacter : http://cerbermail.com/?zoTY7ZkLcD
Avatar
Eric Galais
magnifique, merci

"Gilles LAURENT" a écrit dans le message de news:

"Eric Galais" a écrit dans le message de
news:
| C'est exactement la démarche que je recherchais à une chose près; je
| lance le batch sur le serveur donc pas un ipconfig mais un ping pour
| le test. Il faut donc que je revois presque entièrement le batch
| parce que les critères de récupération sont plus bon avec un Ping.
|
| En tout cas je ne navigue plus dans le noir, merci :)

Bonjour,

Ci dessous le script batch sync.cmd permettant de déclencher la
synchronisation uniquement si le poste est connecté sur son site
principal (testé avec XP SP1/SP2 FR). Cette fois-ci, le script s'exécute
coté serveur :

-- Couper ici : sync.cmd --

@echo off

:: Initialisation
set netId >
:: Extraction des octets (j,k,l,m) de l'adresse IP du poste client
:: L'adresse IP est retournée via un Ping en utilisant le nom de hôte
:: spécifié comme premier argument
for /f "tokens=3" %%i in ('ping /n 1 %1 ^| find /i "ponse de"') do (
for /f "delims=.: tokens=1-4" %%j in ('echo %%i') do (
echo Adresse IP : %%j %%k %%l %%m
set netId=%%j
)
)

:: synchronisation des données uniquement si le poste est connecté
:: sur son site principal. L'appartenance au site principal est
:: déterminée à l'aide de l'identificateur de réseau spécifié comme
:: second argument
:_sync
if "%2" NEQ "%netId%" goto :eof

:: le poste est connecté sur son site principal
:: la synchronisation peut être lancée
echo synchronisation en cours ...

-- Couper ici : sync.cmd --

Ce script supporte deux arguments. Le premier est la nom de hôte
(netbios ou DNS) du poste client et le deuxième est l'identificateur de
réseau du site principal. Par exemple, pour déclencher la
synchronisation des données du poste PC001 si et seulement si celui-ci
se situe sur le site de Paris :
>sync.cmd PC001 170

--
Gilles LAURENT
Me contacter : http://cerbermail.com/?zoTY7ZkLcD




Avatar
Eric Galais
Encore plus fort que le roquefort:
Si ma liste de machine est dans un fichier texte?

computer.txt:
ABC12345
ABD23456
BDC34562

En fait sur mon serveur je vais lancer une tache planifiée qui va lancer la
synchro sur les postes présents dans le fichier texte. Le batch teste si la
machine est sur le site et lance (ou non) la synchro puis passe au pc
suivant dans la liste.

J'ai tenté de mettre le nez dans FOR /F ["options"] %variable IN
(computer.txt) DO commande [paramètres].
J'ai tellement peu l'esprit logique en dev que j'arrive à rien; la gestion
de variables par recherche j'ai du mal.

Si à l'occase t'as du temps encore à me consacrer :)

Merci d'avance.

Eric



"Gilles LAURENT" a écrit dans le message de news:

"Eric Galais" a écrit dans le message de
news:
| C'est exactement la démarche que je recherchais à une chose près; je
| lance le batch sur le serveur donc pas un ipconfig mais un ping pour
| le test. Il faut donc que je revois presque entièrement le batch
| parce que les critères de récupération sont plus bon avec un Ping.
|
| En tout cas je ne navigue plus dans le noir, merci :)

Bonjour,

Ci dessous le script batch sync.cmd permettant de déclencher la
synchronisation uniquement si le poste est connecté sur son site
principal (testé avec XP SP1/SP2 FR). Cette fois-ci, le script s'exécute
coté serveur :

-- Couper ici : sync.cmd --

@echo off

:: Initialisation
set netId >
:: Extraction des octets (j,k,l,m) de l'adresse IP du poste client
:: L'adresse IP est retournée via un Ping en utilisant le nom de hôte
:: spécifié comme premier argument
for /f "tokens=3" %%i in ('ping /n 1 %1 ^| find /i "ponse de"') do (
for /f "delims=.: tokens=1-4" %%j in ('echo %%i') do (
echo Adresse IP : %%j %%k %%l %%m
set netId=%%j
)
)

:: synchronisation des données uniquement si le poste est connecté
:: sur son site principal. L'appartenance au site principal est
:: déterminée à l'aide de l'identificateur de réseau spécifié comme
:: second argument
:_sync
if "%2" NEQ "%netId%" goto :eof

:: le poste est connecté sur son site principal
:: la synchronisation peut être lancée
echo synchronisation en cours ...

-- Couper ici : sync.cmd --

Ce script supporte deux arguments. Le premier est la nom de hôte
(netbios ou DNS) du poste client et le deuxième est l'identificateur de
réseau du site principal. Par exemple, pour déclencher la
synchronisation des données du poste PC001 si et seulement si celui-ci
se situe sur le site de Paris :
>sync.cmd PC001 170

--
Gilles LAURENT
Me contacter : http://cerbermail.com/?zoTY7ZkLcD




Avatar
Gilles LAURENT
"Eric Galais" a écrit dans le message de
news:
[...]
| Si ma liste de machine est dans un fichier texte?
|
| En fait sur mon serveur je vais lancer une tache planifiée qui va
| lancer la synchro sur les postes présents dans le fichier texte. Le
| batch teste si la machine est sur le site et lance (ou non) la
| synchro puis passe au pc suivant dans la liste.
|
| Merci d'avance.
|
| Eric

Bonsoir,

Soit le fichier de configuration "clients.txt" au format suivant :
hôte identificateur_de_réseau_principal commentaire_facultatif
Avec comme séparateurs de champs des espaces, des tabulations ou une
virgule.

Par exemple :
PC001 170 (Paris)
PC002 180 (Lorient)
PC003 170 (Paris)

Le fait de disposer de l'identificateur de réseau principal dans le
fichier de configuration permet de déposer le script et le fichier de
configuration sur plusieurs sites (Paris et Lorient) sans nécessiter de
paramétrage spécifique lié au site. L'ensemble reste générique et simple
à administrer. Le poste de Lorient ne se synchronisera qu'avec le
serveur de Lorient et inversement. Il faudra bien sûr que la commande de
synchronisation ne fasse aucune référence à un serveur d'un site
quelconque.

Le script batch (testé avec XP SP1/SP2 FR) :

-- Couper ici : sync.cmd --

@echo off

:: Enumération des noms de hôte présents dans le fichier de
:: configuration clients.txt
for /f "tokens=1,2" %%i in (clients.txt) do call :_ping %%i %%j

:: fin de traitement
goto :eof

:: Procédure de synchronisation
:: Le nom de hôte et l'identificateur de réseau principal sont
:: transmis comme arguments
:_ping
echo.
echo Searching host [%1] on network [%2] ...

:: Initialisation de l'identificateur de réseau
set netId
:: Extraction des octets (j,k,l,m) de l'adresse IP du poste client
:: L'adresse IP est retournée via un Ping en utilisant le nom de hôte
:: spécifié dans le fichier de configuration
for /f "tokens=3" %%i in ('ping /n 1 %1 ^| find /i "ponse de"') do (
for /f "delims=.: tokens=1-4" %%j in ('echo %%i') do (
echo - host %1 [ %%j.%%k.%%l.%%m] detected
set netId=%%j
)
)

:: Vérification de la détection du hôte
if "" == "%netId%" echo - host %1 is offline & goto :eof

:: Synchronisation des données uniquement si le poste est connecté
:: sur son site principal. L'appartenance au site principal est
:: déterminée à l'aide de l'identificateur de réseau spécifié dans le
:: fichier de configuration
if "%2" neq "%netId%" echo - not main network & goto :eof

:: Le poste est connecté sur son site principal
:: La synchronisation peut être lancée
echo - backup in progress ...
echo - started on %time%

:: insérer ici la commande de synchro (robocopy, ...)

echo - finished at %time%

-- Couper ici : sync.cmd --

Pour l'éxécuter :
>sync.cmd

Ou alors avec traces dans un fichier log :
>sync.cmd >> c:logsync.log

Note: Dans cette implémentation, le fichier de configuration
"clients.txt" doit se situer dans le même dossier que le script
"sync.cmd". Il faudra faire attention à cela lors de la planification de
la tâche en spécifiant correctement le répertoire de démarrage (i.e
"Démarrer dans").

Personnellement, je serai resté sur la première solution. A mon sens,
c'est le poste de travail qui doit être l'initiateur de la
synchronisation et non le serveur. D'une part, plusieurs postes clients
peuvent synchroniser leurs données en parallèle (ce qui n'est pas le cas
dans votre implémentation séquentielle) et d'autre part, l'utilisateur
(si présent) peut être informé qu'une synchronisation est en cours et
peut éventuellement suivre la progression du traitement ou l'interrompre
et la reporter s'il le souhaite. Bien entendu, je ne connais pas vos
contraintes ...

--
Gilles LAURENT
Me contacter : http://cerbermail.com/?zoTY7ZkLcD
Avatar
Eric Galais
merveilleux.

En fait il y aura une tâche auto sur le serveur et une tâche manuelle sur le
client.
La tâche sur le serveur se fera automatiquement à une certaine heure; si le
client est hors site lors de la synchro auto, il a la possibilité de la
faire à la mano. J'ai positionné aussi un test sur le client afin que s'il
est hors site, qu'il ne puisse pas lancer la synchro manuellement.
Les abus sont rapides dans la société, il faut que tout soit opaque pour le
client; donc juste une icone sur le bureau sans savoir ce qui se fait
derrière c'est très bien.

Je te remercie pour tout le temps que tu as pu me consacrer, mon urgence ne
devient plus une urgence grace à toi.
Je vais tester ca aujourd'hui.
Bonne journée.

Eric
"Gilles LAURENT" a écrit dans le message de news:
%23$
"Eric Galais" a écrit dans le message de
news:
[...]
| Si ma liste de machine est dans un fichier texte?
|
| En fait sur mon serveur je vais lancer une tache planifiée qui va
| lancer la synchro sur les postes présents dans le fichier texte. Le
| batch teste si la machine est sur le site et lance (ou non) la
| synchro puis passe au pc suivant dans la liste.
|
| Merci d'avance.
|
| Eric

Bonsoir,

Soit le fichier de configuration "clients.txt" au format suivant :
hôte identificateur_de_réseau_principal commentaire_facultatif
Avec comme séparateurs de champs des espaces, des tabulations ou une
virgule.

Par exemple :
PC001 170 (Paris)
PC002 180 (Lorient)
PC003 170 (Paris)

Le fait de disposer de l'identificateur de réseau principal dans le
fichier de configuration permet de déposer le script et le fichier de
configuration sur plusieurs sites (Paris et Lorient) sans nécessiter de
paramétrage spécifique lié au site. L'ensemble reste générique et simple
à administrer. Le poste de Lorient ne se synchronisera qu'avec le
serveur de Lorient et inversement. Il faudra bien sûr que la commande de
synchronisation ne fasse aucune référence à un serveur d'un site
quelconque.

Le script batch (testé avec XP SP1/SP2 FR) :

-- Couper ici : sync.cmd --

@echo off

:: Enumération des noms de hôte présents dans le fichier de
:: configuration clients.txt
for /f "tokens=1,2" %%i in (clients.txt) do call :_ping %%i %%j

:: fin de traitement
goto :eof

:: Procédure de synchronisation
:: Le nom de hôte et l'identificateur de réseau principal sont
:: transmis comme arguments
:_ping
echo.
echo Searching host [%1] on network [%2] ...

:: Initialisation de l'identificateur de réseau
set netId >
:: Extraction des octets (j,k,l,m) de l'adresse IP du poste client
:: L'adresse IP est retournée via un Ping en utilisant le nom de hôte
:: spécifié dans le fichier de configuration
for /f "tokens=3" %%i in ('ping /n 1 %1 ^| find /i "ponse de"') do (
for /f "delims=.: tokens=1-4" %%j in ('echo %%i') do (
echo - host %1 [ %%j.%%k.%%l.%%m] detected
set netId=%%j
)
)

:: Vérification de la détection du hôte
if "" == "%netId%" echo - host %1 is offline & goto :eof

:: Synchronisation des données uniquement si le poste est connecté
:: sur son site principal. L'appartenance au site principal est
:: déterminée à l'aide de l'identificateur de réseau spécifié dans le
:: fichier de configuration
if "%2" neq "%netId%" echo - not main network & goto :eof

:: Le poste est connecté sur son site principal
:: La synchronisation peut être lancée
echo - backup in progress ...
echo - started on %time%

:: insérer ici la commande de synchro (robocopy, ...)

echo - finished at %time%

-- Couper ici : sync.cmd --

Pour l'éxécuter :
>sync.cmd

Ou alors avec traces dans un fichier log :
>sync.cmd >> c:logsync.log

Note: Dans cette implémentation, le fichier de configuration
"clients.txt" doit se situer dans le même dossier que le script
"sync.cmd". Il faudra faire attention à cela lors de la planification de
la tâche en spécifiant correctement le répertoire de démarrage (i.e
"Démarrer dans").

Personnellement, je serai resté sur la première solution. A mon sens,
c'est le poste de travail qui doit être l'initiateur de la
synchronisation et non le serveur. D'une part, plusieurs postes clients
peuvent synchroniser leurs données en parallèle (ce qui n'est pas le cas
dans votre implémentation séquentielle) et d'autre part, l'utilisateur
(si présent) peut être informé qu'une synchronisation est en cours et
peut éventuellement suivre la progression du traitement ou l'interrompre
et la reporter s'il le souhaite. Bien entendu, je ne connais pas vos
contraintes ...

--
Gilles LAURENT
Me contacter : http://cerbermail.com/?zoTY7ZkLcD




Avatar
Eric Galais
Bon, j'ai presque tout finalisé mais il me reste une certitude à avoir.
J'ai remarqué que je dois faire mes tests sur les 2 premiers digits de
l'adresse IP: 130.1 ou 130.10 ou autre, au lieu du premier uniquement.
Si j'ai bien compris j'ai qu'à changer les tokens comme suit:


"Gilles LAURENT" a écrit dans le message de news:
%23$
"Eric Galais" a écrit dans le message de
news:
[...]
| Si ma liste de machine est dans un fichier texte?
|
| En fait sur mon serveur je vais lancer une tache planifiée qui va
| lancer la synchro sur les postes présents dans le fichier texte. Le
| batch teste si la machine est sur le site et lance (ou non) la
| synchro puis passe au pc suivant dans la liste.
|
| Merci d'avance.
|
| Eric

Bonsoir,

Soit le fichier de configuration "clients.txt" au format suivant :
hôte identificateur_de_réseau_principal commentaire_facultatif
Avec comme séparateurs de champs des espaces, des tabulations ou une
virgule.

Par exemple :
PC001 170 (Paris)
PC002 180 (Lorient)
PC003 170 (Paris)

Le fait de disposer de l'identificateur de réseau principal dans le
fichier de configuration permet de déposer le script et le fichier de
configuration sur plusieurs sites (Paris et Lorient) sans nécessiter de
paramétrage spécifique lié au site. L'ensemble reste générique et simple
à administrer. Le poste de Lorient ne se synchronisera qu'avec le
serveur de Lorient et inversement. Il faudra bien sûr que la commande de
synchronisation ne fasse aucune référence à un serveur d'un site
quelconque.

Le script batch (testé avec XP SP1/SP2 FR) :

-- Couper ici : sync.cmd --

@echo off

:: Enumération des noms de hôte présents dans le fichier de
:: configuration clients.txt
for /f "tokens=1,2" %%i in (clients.txt) do call :_ping %%i %%j

:: fin de traitement
goto :eof

:: Procédure de synchronisation
:: Le nom de hôte et l'identificateur de réseau principal sont
:: transmis comme arguments
:_ping
echo.
echo Searching host [%1] on network [%2] ...

:: Initialisation de l'identificateur de réseau
set netId >
:: Extraction des octets (j,k,l,m) de l'adresse IP du poste client
:: L'adresse IP est retournée via un Ping en utilisant le nom de hôte
:: spécifié dans le fichier de configuration
for /f "tokens=3" %%i in ('ping /n 1 %1 ^| find /i "ponse de"') do (


for /f "tokens=6" %%i in ('ping /n 1 %1 ^| find /i "ponse de"') do (

for /f "delims=.: tokens=1-4" %%j in ('echo %%i') do (


for /f "delims=.: tokens=1-8" %%j.%%k in ('echo %%i') do (

echo - host %1 [ %%j.%%k.%%l.%%m] detected
set netId=%%j


set netId=%%j.%%k

)
)

:: Vérification de la détection du hôte
if "" == "%netId%" echo - host %1 is offline & goto :eof

:: Synchronisation des données uniquement si le poste est connecté
:: sur son site principal. L'appartenance au site principal est
:: déterminée à l'aide de l'identificateur de réseau spécifié dans le
:: fichier de configuration
if "%2" neq "%netId%" echo - not main network & goto :eof

:: Le poste est connecté sur son site principal
:: La synchronisation peut être lancée
echo - backup in progress ...
echo - started on %time%

:: insérer ici la commande de synchro (robocopy, ...)

echo - finished at %time%

-- Couper ici : sync.cmd --

Pour l'éxécuter :
>sync.cmd

Ou alors avec traces dans un fichier log :
>sync.cmd >> c:logsync.log

Note: Dans cette implémentation, le fichier de configuration
"clients.txt" doit se situer dans le même dossier que le script
"sync.cmd". Il faudra faire attention à cela lors de la planification de
la tâche en spécifiant correctement le répertoire de démarrage (i.e
"Démarrer dans").

Personnellement, je serai resté sur la première solution. A mon sens,
c'est le poste de travail qui doit être l'initiateur de la
synchronisation et non le serveur. D'une part, plusieurs postes clients
peuvent synchroniser leurs données en parallèle (ce qui n'est pas le cas
dans votre implémentation séquentielle) et d'autre part, l'utilisateur
(si présent) peut être informé qu'une synchronisation est en cours et
peut éventuellement suivre la progression du traitement ou l'interrompre
et la reporter s'il le souhaite. Bien entendu, je ne connais pas vos
contraintes ...

--
Gilles LAURENT
Me contacter : http://cerbermail.com/?zoTY7ZkLcD




Sachant que dans client.txt j'aurais mis comme suit:
Machine1 130.1
Machine2 130.1
ou
Machine1 130.10
Machine2 130.10
ou
Machine1 130.200
Machine2 130.200

C'est une solution qui sera très probablement mise sur plusieurs sites avec
le 2eme digit qui peut être à 1, 2 ou 3 chiffres.


Je suis pas sur du tout pour mes tokens.
Sinon pour info, les synchro j'en ai une auto sur serveur qui fait de la
copie simple sans supression et sur le client une synchro manuelle avec
purge.

En tout cas pour le moment ca marche au poil avec des logs dans tous les
sens.

Merci d'avance Gilles, je sais que tu veille sur moi :)

Eric

Avatar
Gilles LAURENT
"Eric Galais" a écrit dans le message de
news:
| Bon, j'ai presque tout finalisé mais il me reste une certitude à
| avoir. J'ai remarqué que je dois faire mes tests sur les 2 premiers
| digits de l'adresse IP: 130.1 ou 130.10 ou autre, au lieu du premier
| uniquement.
| Si j'ai bien compris j'ai qu'à changer les tokens comme suit:

[...]

| Eric

Il suffit uniquement de remplacer la ligne :
set netId=%%j
par :
set netId=%%j.%%k

et le tour et joué ;-)

--
Gilles LAURENT
Me contacter : http://cerbermail.com/?zoTY7ZkLcD
1 2