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

4 réponses

1 2
Avatar
Eric Galais
"Gilles LAURENT" a écrit dans le message de news:
%
"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




Encore plus simple en effet.
J'ai récupéré un guide sur le scripting en batch bien puissant, j'ai du
boulot :)

Encore un grand merci, je vais pouvoir faire ma démo cet aprèm à ma
hiérarchie.

Bonne journée.

Eric

Avatar
Gilles LAURENT
"Eric Galais" a écrit dans le message de
news:%

[...]

| J'ai récupéré un guide sur le scripting en batch bien puissant, j'ai
| du boulot :)

Et oui ! c'est toujours comme ça ;-)
Je vous invite également à découvrir le nouveau shell Microsoft Windows
PowerShell consultable à cette adresse ...
http://www.microsoft.com/windowsserver2003/technologies/management/powershell/default.mspx

... ainsi que le blog de Jacques Barathon [MS] sur Windows PowerShell :
http://janel.spaces.msn.com/blog

| Encore un grand merci, je vais pouvoir faire ma démo cet aprèm à ma
| hiérarchie.

Ce fut un plaisir. Bonne démo :-)

--
Gilles LAURENT
Me contacter : http://cerbermail.com/?zoTY7ZkLcD
Avatar
Jacques Barathon [MS]
"Gilles LAURENT" a écrit dans le message de news:
%233d$
"Eric Galais" a écrit dans le message de
news:%

[...]

| J'ai récupéré un guide sur le scripting en batch bien puissant, j'ai
| du boulot :)

Et oui ! c'est toujours comme ça ;-)
Je vous invite également à découvrir le nouveau shell Microsoft Windows
PowerShell consultable à cette adresse ...
http://www.microsoft.com/windowsserver2003/technologies/management/powershell/default.mspx

... ainsi que le blog de Jacques Barathon [MS] sur Windows PowerShell :
http://janel.spaces.msn.com/blog


Merci Gilles pour la promo. Je crois en effet que si l'on découvre le
scripting système maintenant, il est plus intéressant d'investir du temps
dans PowerShell que dans d'autres langages. PowerShell sera la plateforme de
pilotage de Windows et de l'ensemble des produits serveur dans les années
qui viennent (voir Exchange 2007, MOM 2007, etc).

Pour ce qui est du besoin exprimé par Eric, je me suis amusé à une petite
traduction en PowerShell. Rien de bien transcendant, mais cela permet
d'illustrer deux ou trois fonctionnalités sympathiques:

--- couper ici ---
get-content postes.txt | foreach {
$nom,$maison,$notes = $_.split("`t")
$ping = new-object System.Net.NetworkInformation.Ping
$reponse = ""
$reponse = $ping.Send($nom,120,[byte]0,$null)
if ($reponse.Status -eq "Success") {
"$nom est en ligne. Adresse IP: $($reponse.Address.IPAddressToString)"
$reponse.Address.IPAddressToString -match "^d+.d+"
$site=$matches[0]
if ($site -eq $maison) {
"$nom est sur son site d'origine. Synchro..."
# insérer ici tâche de synchro
}
else {
"$nom n'est pas sur son site d'origine. Pas de synchro."
}
}
else {
"$nom n'est pas en ligne."
}
}
--- couper ici ---

Quelques commentaires...

A noter l'affectation des variables selon le contenu de chaque ligne du
fichier:
$nom,$maison,$notes = $_.split("`t")

$_.split("`t") éclate la ligne en cours ($_) en utilisant le caractère de
tabulation comme séparateur ("`t"). Si un autre séparateur est utilisé, il
faut mettre à jour cette partie-là. Ensuite, les différentes parties sont
affectées aux variables $nom,$maison et $notes dans l'ordre où elles sont
rencontrées dans la ligne. Un autre exemple pour comprendre:

PS> $nom, $prenom = "lampion;seraphin".split(";")
PS> $nom
lampion
PS> $prenom
seraphin

Le ping est fait avec un objet .NET. Il faut initialiser la variable
$reponse avant de lui affecter le résultat du ping, sinon en cas d'échec de
résolution du nom la variable contient le résultat du ping précédent, ce qui
fausse complètement le reste du script.

L'analyse de l'adresse IP utilise une expression régulière pour isoler les
deux premiers chiffres: "^d+.d+" correspond à un ou plusieurs chiffres
("d" pour "digit") suivis d'un point (".") suivi à nouveau d'un ou
plusieurs chiffres, le tout en début de chaîne ("^"). Cette dernière
précision s'avère à priori inutile mais je préfère être explicite, au cas
où. Cette expression régulière est comparée à l'adresse IP du poste avec
l'opérateur -match. Les résultats d'une comparaison faite avec -match sont
toujours stockés dans la table $matches, et comme ici il ne peut y avoir
qu'un résultat on le trouve dans $matches[0].

Voilà. Le reste relève de la procédure if ... else très classique et devrait
se passer de commentaires. Je n'ai testé que très sommairement mais ça
devrait pouvoir le faire.

Cela dit, les remarques de Gilles sur l'intérêt d'un pilotage des synchros
depuis le serveur sont très justes. Des solutions initiées par les postes
(avec toutes les précautions qui s'imposent) s'avèreraient à la fois plus
simples, plus fiables et plus performantes.

Jacques

Avatar
Eric Galais
"Jacques Barathon [MS]" a écrit dans le
message de news: %
"Gilles LAURENT" a écrit dans le message de news:
%233d$
"Eric Galais" a écrit dans le message de
news:%

[...]

| J'ai récupéré un guide sur le scripting en batch bien puissant, j'ai
| du boulot :)

Et oui ! c'est toujours comme ça ;-)
Je vous invite également à découvrir le nouveau shell Microsoft Windows
PowerShell consultable à cette adresse ...
http://www.microsoft.com/windowsserver2003/technologies/management/powershell/default.mspx

... ainsi que le blog de Jacques Barathon [MS] sur Windows PowerShell :
http://janel.spaces.msn.com/blog


Merci Gilles pour la promo. Je crois en effet que si l'on découvre le
scripting système maintenant, il est plus intéressant d'investir du temps
dans PowerShell que dans d'autres langages. PowerShell sera la plateforme
de pilotage de Windows et de l'ensemble des produits serveur dans les
années qui viennent (voir Exchange 2007, MOM 2007, etc).

Pour ce qui est du besoin exprimé par Eric, je me suis amusé à une petite
traduction en PowerShell. Rien de bien transcendant, mais cela permet
d'illustrer deux ou trois fonctionnalités sympathiques:

--- couper ici ---
get-content postes.txt | foreach {
$nom,$maison,$notes = $_.split("`t")
$ping = new-object System.Net.NetworkInformation.Ping
$reponse = ""
$reponse = $ping.Send($nom,120,[byte]0,$null)
if ($reponse.Status -eq "Success") {
"$nom est en ligne. Adresse IP: $($reponse.Address.IPAddressToString)"
$reponse.Address.IPAddressToString -match "^d+.d+"
$site=$matches[0]
if ($site -eq $maison) {
"$nom est sur son site d'origine. Synchro..."
# insérer ici tâche de synchro
}
else {
"$nom n'est pas sur son site d'origine. Pas de synchro."
}
}
else {
"$nom n'est pas en ligne."
}
}
--- couper ici ---

Quelques commentaires...

A noter l'affectation des variables selon le contenu de chaque ligne du
fichier:
$nom,$maison,$notes = $_.split("`t")

$_.split("`t") éclate la ligne en cours ($_) en utilisant le caractère de
tabulation comme séparateur ("`t"). Si un autre séparateur est utilisé, il
faut mettre à jour cette partie-là. Ensuite, les différentes parties sont
affectées aux variables $nom,$maison et $notes dans l'ordre où elles sont
rencontrées dans la ligne. Un autre exemple pour comprendre:

PS> $nom, $prenom = "lampion;seraphin".split(";")
PS> $nom
lampion
PS> $prenom
seraphin

Le ping est fait avec un objet .NET. Il faut initialiser la variable
$reponse avant de lui affecter le résultat du ping, sinon en cas d'échec
de résolution du nom la variable contient le résultat du ping précédent,
ce qui fausse complètement le reste du script.

L'analyse de l'adresse IP utilise une expression régulière pour isoler les
deux premiers chiffres: "^d+.d+" correspond à un ou plusieurs chiffres
("d" pour "digit") suivis d'un point (".") suivi à nouveau d'un ou
plusieurs chiffres, le tout en début de chaîne ("^"). Cette dernière
précision s'avère à priori inutile mais je préfère être explicite, au cas
où. Cette expression régulière est comparée à l'adresse IP du poste avec
l'opérateur -match. Les résultats d'une comparaison faite avec -match sont
toujours stockés dans la table $matches, et comme ici il ne peut y avoir
qu'un résultat on le trouve dans $matches[0].

Voilà. Le reste relève de la procédure if ... else très classique et
devrait se passer de commentaires. Je n'ai testé que très sommairement
mais ça devrait pouvoir le faire.

Cela dit, les remarques de Gilles sur l'intérêt d'un pilotage des synchros
depuis le serveur sont très justes. Des solutions initiées par les postes
(avec toutes les précautions qui s'imposent) s'avèreraient à la fois plus
simples, plus fiables et plus performantes.

Jacques




Merci bien pour ces quelques informations. Quand le temps me le permettra,
je me jetterais dans le PowerShell, autant s'y mettre de suite.

Bonne continuation.

Eric


1 2