OVH Cloud OVH Cloud

Noms longs dans WshShell.Run

9 réponses
Avatar
Eric Galais
Bonsoir tout le monde,

Encore une fois je fais appel à vos services de professionnels dans l'art du
développement.
Je me trouve confronté à un problème bête comme choux; les noms longs.

Dans un script Vbs, je dois lancer une commande de type robocopy qui se
trouve dans une arbo de C:\program files et bien entendu avec plein de
commutateurs qui vont avec. La destination de la copie est sur un partage
réseau.
Mon début de script est comme ceci:

=========== Couic==================
On Error Resume Next
Dim Install_
strComputer = "."

Set Reponse = Nulle
Set Install_ = "c:\program files\XXX\Nomad-Sync"
set source_copie = "D:\synchro"
set destination_copie = \\Serveur\partage
=========== Couic==================

et la fin qui me fait défaut, après une MSgbox de lancement:
=========== Couic2==================

If Reponse= VbOK Then _
WshShell.Run (Install_ & "\robocopy.exe" & " " & Source_copie & " " &
destination_copie & "\%computername%\"& " " &"/MIR" & " "&"/R:3" & "
"&"/W:10" & " "& "/X" & " "& "/NP" & " "& "/LOG+:" & Install_
&"\Logs\sync.log") _
Else Msgbox "Procédure annulée",Vbexclamation,"Annulation" _
End If
=========== Couic2==================

La syntaxe est barbare et ne fonctionne pas.

En gros j'ai un C:\program files\xxx\Nomad-Sync\robocopy.exe Source
Destination /MIR /R:3 /W:10 /X /NP /LOG+:Sync.log à lancer. Problème avec le
répertoire "Program files".

Merci d'avance

Eric

9 réponses

Avatar
Gilles LAURENT
"Eric Galais" a écrit dans le message de
news:
| Bonsoir tout le monde,

Bonsoir Eric,

| WshShell.Run (Install_ & "robocopy.exe" & " " & Source_copie & " " &

WshShell.Run (Chr (34) & Install_ & "robocopy.exe" & Chr (34) & " " ...

--
Gilles LAURENT
Me contacter : http://cerbermail.com/?zoTY7ZkLcD
Avatar
Eric Galais
"Gilles LAURENT" a écrit dans le message de news:

"Eric Galais" a écrit dans le message de
news:
| Bonsoir tout le monde,

Bonsoir Eric,

| WshShell.Run (Install_ & "robocopy.exe" & " " & Source_copie & " " &

WshShell.Run (Chr (34) & Install_ & "robocopy.exe" & Chr (34) & " " ...

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




Bonjour Gilles,

Toujours présent à l'appel, çà fait plaisir. Je vais tester tout ca.
Merci

Eric

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


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

"Eric Galais" a écrit dans le message de
news:
| Bonsoir tout le monde,

Bonsoir Eric,

| WshShell.Run (Install_ & "robocopy.exe" & " " & Source_copie & " " &

WshShell.Run (Chr (34) & Install_ & "robocopy.exe" & Chr (34) & " " ...

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




Bonjour Gilles,

Toujours présent à l'appel, çà fait plaisir. Je vais tester tout ca.
Merci

Eric



Pour la syntaxe c'est nickel mais j'ai un soucil qui persiste... il ne
reconnait pas mes variables.
en debut de code j'ai :

Set Reponse = Nulle
Set Install_ = "c:program filesApaveNomad-Sync"
set source_copie = "D:synchro"
set destination_copie = "C:test"

Mais quand je fais un Msgbox Install_ il m'affiche une boite vierge. Ma
variable est mal définie?
un Msgbox Install_ & "robocopy.exe" ca m'affiche une fenêtre avec
robocopy.
Evidement c'est pareil pour les autres.

Merci d'avance

Eric


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

Bonjour Eric,

| Pour la syntaxe c'est nickel mais j'ai un soucil qui persiste... il ne
| reconnait pas mes variables.
| en debut de code j'ai :
|
| Set Reponse = Nulle
| Set Install_ = "c:program filesApaveNomad-Sync"
| set source_copie = "D:synchro"
| set destination_copie = "C:test"

En phase de debugging, toujours mettre en commentaire la ligne de
gestion des erreurs suivante :
On Error Resume Next

La déclaration "Set" permet de créer une instance d'un objet :
Set oFS = CreateObject ("Scripting.FileSystemObject")

Pour définir des variables :
source_copie = "D:synchro"

--
Gilles LAURENT
Me contacter : http://cerbermail.com/?zoTY7ZkLcD
Avatar
Eric Galais
"Gilles LAURENT" a écrit dans le message de news:

"Eric Galais" a écrit dans le message de
news:u8R%

En phase de debugging, toujours mettre en commentaire la ligne de
gestion des erreurs suivante :
On Error Resume Next


C'est noté, j'ai copié bêtement car mon niveau actuel se résume à du légo
avec des bouts de scripts et quelques recherches persos.

La déclaration "Set" permet de créer une instance d'un objet :
Set oFS = CreateObject ("Scripting.FileSystemObject")


Je l'utilise aussi dans mon script , çà ca va.


Pour définir des variables :
source_copie = "D:synchro"


Ca je le fais bien mais c'est bizard ca marche pas. Mon code entier est le
suivant:

========= Couic ============================== On Error Resume Next
Dim Install_
strComputer = "."

Set Reponse = Nulle
Set Install_ = "c:program filesApaveNomad-Sync"
set source_copie = "D:synchro"
set destination_copie = "C:test"

Msgbox "Bienvenue dans l'outil de synchronisation Nomad-Sync",,"Nomad-Sync"
Set ObjWMI = GetObject("winmgmts:" & strComputer & "rootcimv2")
Set colItems = ObjWMI.ExecQuery ("Select IPAddress from
Win32_NetworkAdapterConfiguration Where IPEnabled=TRUE")
For Each objItem in colItems
If Not IsNull(objItem.IPAddress) Then
IP = objItem.IPAddress(IP)
End If
Next
If Instr(1, IP , "130.1.") = 0 Then
Msgbox "Votre PC n'est pas sur son site d'origine, il ne sera pas
synchronisé",Vbcritical,"Hors site"
Else
Msgbox "Votre adresse IP est: " & IP , Vbinformation,"Vérification de
localisation": _
Reponse=Msgbox ("Votre Pc est bien sur site, Voulez vous lancer la
synchronisation de vos données?", _
Vbquestion+vbYesNo,"Synchronisation")
End If
'WScript.Echo "pouet" & Install_
If Reponse= 6 Then _
WshShell.Run (Install_ & "robocopy.exe """ & Source_copie & """ """ &
destination_copie & "%computername%"" /MIR /R:3 /W:10 /X /NP /LOG+:""" &
Install_ &"Logssync.log""") _
Else Msgbox "Procédure annulée",Vbexclamation,"Annulation" _
End If
========= Couic ==============================
Dans le WshShell.Run j'avais testé les Chr(34) mais ca faisait pareil. Pas
d'erreur mais rien ne se passe. (peut être à cause du "On Error Resume Next"
que j'avais laissé).

Au final le destination_copie sera un chemin serveur, j'espère que le double
anti slash sera bien géré dans la chaine WshShell.Run.

Si une personne à le temps de se plonger dans mon monde .... :)

Merci d'avance.

Eric

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

Bonjour Eric,

Ci-dessous le script corrigé :

--- Coupez ici : NomadSync.vbs ---

Option Explicit

' déclaration des variables
Dim oSh, oWMI, oNetCard
Dim colNetCards
Dim strIPAddress, strCmd

' déclaration des constantes
Const InstallPath = "C:Program FilesApaveNomad-Sync"
Const SourcePath = "D:Synchro"
Const DestPath = "C:test"

' initialisation des objets
Set oSh = CreateObject ("WScript.Shell")
Set oWMI = GetObject ("winmgmts:.rootcimv2")

' welcome
Msgbox "Bienvenue dans l'outil de synchronisation Nomad-Sync", _
, _
"Nomad-Sync"

' recherche des interfaces réseau installées
Set colNetCards = OWMI.ExecQuery ( _
"Select IPAddress " & _
"From Win32_NetworkAdapterConfiguration " & _
"Where IPEnabled=True")

' énumération des interfaces
For Each oNetCard In colNetCards
If Not IsNull (oNetCard.IPAddress) Then

' sauvegarde de l'adresse IP
' la dernière interface est prise en compte
strIPAddress = Join (oNetCard.IPAddress)

End If
Next

' détermination du site actuel
If Instr (1, strIPAddress, "130.1.") = 0 Then

' la machine n'est pas sur son site
Msgbox "Votre PC (" & _
strIPAddress & _
") n'est pas sur son site d'origine. " & _
VBCrLf & _
"Il ne sera pas synchronisé.", _
VBCritical, _
"Hors site"

Else

' la machine est sur son site
' demande confirmation de l'utilisateur
If _
Msgbox ("Votre PC (" & _
strIPAddress & _
") est sur son site d'origine. " & _
VBCrLf & _
"Voulez vous lancer la synchronisation " & _
"de vos données ?", _
VBQuestion + VBYesNo, _
"Synchronisation") = VBYes _
Then

' construction de la ligne de commandes
strCmd = Chr (34) & _
InstallPath & "robocopy.exe" & _
Chr (34) & _
" " & _
SourcePath & _
" " & _
DestPath & "%computername%" & _
" " & _
"/MIR /R:3 /W:10 /X /NP /LOG+:" & _
Chr (34) & _
InstallPath & "Logssync.log" & _
Chr (34)

' exécution de robocopy
oSh.Run strCmd, 1, True

Else

' la synchro a été reportée par l'utilisateur
Msgbox "Procédure annulée !", _
VBExclamation, _
"Annulation"

End If
End If

--- Coupez ici : NomadSync.vbs ---

--
Gilles LAURENT
Me contacter : http://cerbermail.com/?zoTY7ZkLcD
Avatar
Eric Galais
"Gilles LAURENT" a écrit dans le message de news:

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

Bonjour Eric,

Ci-dessous le script corrigé :

--- Coupez ici : NomadSync.vbs ---
[...]

--- Coupez ici : NomadSync.vbs ---

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




Ca marche impécablement, merci Gilles.
Je me pose une dernière question.
Quand j'ai plusieurs cartes de référencées, genre connexion à un PdaPhone
(je viens d'avoir le problème) ou quand tu as une connexion 1394, j'aimerais
insérer une autre condition que IPEnabled=True en plus.(DNSDomain qui n'est
valable que pour la connexion LAN entreprise)

Si je remplace:

Set colNetCards = OWMI.ExecQuery ( _
"Select IPAddress " & _
"From Win32_NetworkAdapterConfiguration " & _
"Where IPEnabled=True")

par:

Set colNetCards = OWMI.ExecQuery ( _
"Select IPAddress " & _
"From Win32_NetworkAdapterConfiguration " & _
"Where IPEnabled=True" + "Where DNSDomain=Toto.com")

Je ne vois pas comment forcer la double vérification, j'ai pensé au "+"
Dans ce cas de figure ca me génère une erreur sur le For qui suit.

Eric

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

| Ca marche impécablement, merci Gilles.

Super ;-)

| Je me pose une dernière question.
| Quand j'ai plusieurs cartes de référencées, genre connexion à un
| PdaPhone (je viens d'avoir le problème) ou quand tu as une connexion
| 1394, j'aimerais insérer une autre condition que IPEnabled=True en
| plus.(DNSDomain qui n'est valable que pour la connexion LAN
| entreprise)

[...]

| Set colNetCards = OWMI.ExecQuery ( _
| "Select IPAddress " & _
| "From Win32_NetworkAdapterConfiguration " & _
| "Where IPEnabled=True" + "Where DNSDomain=Toto.com")

Set colNetCards = oWMI.ExecQuery ( _
"Select IPAddress, DNSDomain " & _
"From Win32_NetworkAdapterConfiguration " & _
"Where IPEnabled=True And DNSDomain='toto.com'")

Note : L'interface doit avoir un suffixe DNS propre à la connexion de
configuré sinon DNSDomain = Null !

--
Gilles LAURENT
Me contacter : http://cerbermail.com/?zoTY7ZkLcD
Avatar
Eric Galais
"Gilles LAURENT" a écrit dans le message de news:
OhBgt%
"Eric Galais" a écrit dans le message de
news:%

| Ca marche impécablement, merci Gilles.

Super ;-)

| Je me pose une dernière question.
| Quand j'ai plusieurs cartes de référencées, genre connexion à un
| PdaPhone (je viens d'avoir le problème) ou quand tu as une connexion
| 1394, j'aimerais insérer une autre condition que IPEnabled=True en
| plus.(DNSDomain qui n'est valable que pour la connexion LAN
| entreprise)

[...]

| Set colNetCards = OWMI.ExecQuery ( _
| "Select IPAddress " & _
| "From Win32_NetworkAdapterConfiguration " & _
| "Where IPEnabled=True" + "Where DNSDomain=Toto.com")

Set colNetCards = oWMI.ExecQuery ( _
"Select IPAddress, DNSDomain " & _
"From Win32_NetworkAdapterConfiguration " & _
"Where IPEnabled=True And DNSDomain='toto.com'")

Note : L'interface doit avoir un suffixe DNS propre à la connexion de
configuré sinon DNSDomain = Null !

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



Nickel.

J'avais testé le And mais comme suit:
" Where IPEnabled=True" And "Where DNSDomain=Toto.com"
De plus j'avais pas mis les " ' " sur la chaine.

Promis je t'embete plus jusqu'à demain.

Bonne soirée et encore merci

Eric