Fervant lecteur du forum, je passe maintenant du coté obscur de la force en postant un message.
Je devrais obtenir la passerelle par défaut du client en script… Peu importe lequel (VBS, AutoIT, Kixstart, etc.) tant qu’il tourne sous Windows et me donne la passerelle par défaut.
Plus d’explication :
matériel : nous avons plusieurs types de matériel (PC portable, WYSE Winterm différents modèle) qui utilise chaque fois des modèles de connexion différents (j’entend client ICA) ;
déjà tenté : script VBS intérrogeant le [font=Courier:lhtc87rp]WMI Service ROOT CIMV2[/font:lhtc87rp] et plus particulièrement une requête sur [font=Courier:lhtc87rp]Win32_NetworkAdapterconfiguration[/font:lhtc87rp] avec l’option [font=Courier:lhtc87rp]Where IPEnabled = True[/font:lhtc87rp] ; script VBS (sur [font=Courier:lhtc87rp]Root StdRegProv[/font:lhtc87rp]) ; …
A chaque fois j’ai la passerelle du serveur !
Existe-t-il un moyen d’avoir la passerelle client ? Que ce soit pour une WYSE Winterm ou tout autre client ?
Merci de votre aide et s’il manque une quelconque information n’hésitez pas à me la demander.
Voici donc le script (un peu tronqué, il y a de nombreux centres !!) :
strComputer = "."
Set objWMIService = GetObject("winmgmts:" _
& "{impersonationLevel=impersonate}!\" & strComputer & "rootcimv2")
Set colAdapters = objWMIService.ExecQuery _
("SELECT * FROM Win32_NetworkAdapterConfiguration WHERE IPEnabled = True")
Set Wshell = WScript.CreateObject("WScript.Shell")
For Each objAdapter in colAdapters
If Not IsNull(objAdapter.DefaultIPGateway) Then
For i = 0 To UBound(objAdapter.DefaultIPGateway)
' **************************************
' Structure conditionnelle
' **************************************
' Detection de Bruxelles
If objAdapter.DefaultIPGateway(i) = "192.168.1.6" Then
Wscript.Echo "Bruxelles 1"
Else
' Detection de Liège
If objAdapter.DefaultIPGateway(i) = "192.168.6.6" Then
WScript.Echo "Liege 1"
End If
End If
Next
Et ici j'exécute donc le script sur Bruxelles, il me retourne 192.168.1.6 et lorsque je l'exécute sur Liège, Mons, etc. (que ce soit sur WYSE Winterm ou PC Portable utilisant ICA) il me reporte donc 192.168.1.6 en place de la passerelle correcte.
En gros il m'informe que mon objet n'est pas déclaré !
Ce qui me semble assez... Heu... bizarre vu la modification du script. J'ai donc remis à zéro toutes les variables, en les redéclarant et en rechangeant le nom de celles-ci... Et évidement en les définissant (via [font=Courier:618arr4e]Set[/font:618arr4e]). Et dévinez quoi c'est pareil.
Chose étrange. Une idée de où pourrais-je chercher ?
Or quand j'exécute l'ECHO, tout va pour le mieux. J'en conclu donc qu'il n'y a pas de problème du coté des variables d'environnement ! Grr.
Ouf.
Je me suis dit que c'était alors au niveau Win32 que cela bloquait.
J'ai donc fait un p'tit script pour afficher toutes les variables répertoriées :
Option Explicit
Dim WSHShell, Environnement, Tableau, Liste
Set WSHShell = CreateObject("WScript.Shell")
Set Environnement = WSHShell.Environment("PROCESS")
For Each Tableau in Environnement
Liste = Liste & Tableau & vbCrLf
Next
WScript.Echo Liste
En gros il m'informe que mon objet n'est pas déclaré !
Ce qui me semble assez... Heu... bizarre vu la modification du script. J'ai donc remis à zéro toutes les variables, en les redéclarant et en rechangeant le nom de celles-ci... Et évidement en les définissant (via [font=Courier:orwcfima]Set[/font:orwcfima]). Et dévinez quoi c'est pareil.
Chose étrange. Une idée de où pourrais-je chercher ?
Je penses que c'est un problème de droits, car il faut être admin pour interroger ces valeurs WMI....
Ouille. Là ca pose problème ! Personne, excepté les 4 administrateurs, ne peut modifier quoi que ce soit… Et donc le problème de droit est bien présent. Zen zen zen.
Posons alors le problème différement…
Vu que je sais exécuter le script suivant sans problème :
Option ExplicitDim WSHShell, Environnement, Tableau, Liste
Set WSHShell = CreateObject("WScript.Shell")
Set Environnement = WSHShell.Environment("PROCESS")
For Each Tableau in Environnement
Liste = Liste & Tableau & vbCrLf
Next
WScript.Echo Liste
Je suppose que je dois avoir le moyen d’avoir uniquement le CLIENTNAME…
Non ?
(pour info j’ai déjà essayé comme ceci :
Dim WSHShell, WSHProcessEnvi,
Set WSHShell = WScript.CreateObject("WScript.Shell")
Set WHSProcessEnvi = WSHShell.Environment("PROCESS")
WScript.Echo WSHProcessEnvi("CLIENTNAME")
Mais j’ai la même erreur…)
Drôle n’est-il pas que nous puissions avoir tout l’environnement mais pas uniquement une partie…
… Ouille, ben voila, en fait là il me redit le même message d’erreur que tantot. Snirf,
[font=Courier:1h7u04h5]PSExec[/font:1h7u04h5] ? Vais aller voir ce que c’est
[ EDIT ]
Vi ai vu ce que c’est… Pour lancer avec les droits administrateurs, j’utilise AutoIt et plus particulièrement la commande [font=Courier:1h7u04h5]RunAsSet(Admin)[/font:1h7u04h5], puis un [font=Courier:1h7u04h5]ShellExecute(monVBS.vbs)[/font:1h7u04h5] …
Bon sérieusement… J’exécute le script qui lance en droits administrateur et le script qui détermine le Gateway en local sur la session Citrix.
Par contre après discussion, je me dit que le WMI peut aussi intérroger à distance, comme en local.
Pour ce faire, il suffit donc de faire un [font=Courier:qy5ea0ke]GetObject(“winmgmts:” & monOrdinateurOuWyse & “rootCimV2”)[/font:qy5ea0ke] … J’aurais préalablement déterminé la variable [font=Courier:qy5ea0ke]monOrdinateurOuWyse[/font:qy5ea0ke] par un [font=Courier:qy5ea0ke]Shell[/font:qy5ea0ke] (j’entend : [font=Courier:qy5ea0ke]Set myShell = WScript.CreateObject(“WScript.Shell”)[/font:qy5ea0ke] et [font=Courier:qy5ea0ke]Set myEnv = myShell.Environment(“Process”)[/font:qy5ea0ke]). La variable [font=Courier:qy5ea0ke]monOrdinateurOuWyse[/font:qy5ea0ke] aura la valeur suivante [font=Courier:qy5ea0ke]myEnv(“ClientName”)[/font:qy5ea0ke].