Obtenir la passerelle par défaut

Bonjour à tous et toutes,



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.



    Groumphy

Poste ton script, car je pense que ce n’est qu’une question de paramètres…

Hello,



Merci de la réponse si rapide.

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.

Dans l'attente de te lire,

Groumphy

Depuis quelle machine exécutes-tu ce script ?

Hello,



J’exécute cela a partir d’une WYSE Winterm, ou d’un portable dans l’environnement Citrix.



Petite précision que je n’avais pas mentionné, tous nos serveurs se trouvent sur Bruxelles !

Donc le “schéma” de visualisation est le suivant :



Centre gateway centre (réseau externe + petits chemins) gateway Bruxelles Serveurs



Bien à toi,

A mon avis tu executes le script depuis une session citrix, donc cela semble normal qu’il te retourne toujours la même passerelle.



Remplace cette ligne strComputer = “.” , par celle ci-dessous :



Set WshShell = WScript.CreateObject(“WScript.Shell”)

strComputer = WshShell.Environment(“PROCESS”).Item(“clientname”)

Hello,



Merci pour la réponse.

En effet, j’exécute cela dans une session…



Je vais remplacer cela dans le script et je te tiens informé.

Rendez-vous demain pour plus d’info (je viens de quitter ma session aussi :stuck_out_tongue: ).



Dans tous les cas, solution fonctionnelle ou non, je vous tiens informé !!



G.

C’est donc normal que tu retombes sur la même passerelle, car la session est executé sur le serveur ;D



Avec cette partie du script, tu vas interroger en WMI le poste client de la session courante.

Hello,



Saut erreur de ma part, je dois aussi modifier la ligne :



Set objWMIService = GetObject("winmgmts:" _
& "{impersonationLevel=impersonate}!\" & strComputer & "rootcimv2")


??



De plus lorsque je remplace la ligne dite, j’ai l’erreur suivante :

Script : monScript.vbs
Line : 11
Char : 1
Error : Object required: '[string: "BXL-WYSE-002"]'
Code : 800A01A8
Source : Microsoft VBScript runtime error


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 ?

Hello,



Alors … Chose bizarre. Nous sommes d’accord que la ligne suivante récupère la variable d’environnement CLIENTNAME :



strComputer = WshShell.Environment("PROCESS").Item("clientname")



Que nous pouvons bien entendus afficher par :


ECHO %CLIENTNAME%



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


J'ai donc bien là aussi une variable nommée :

CLIENTNAME=BXL-WYSE-002


"Moi y en a plus comprendre grand chose !"

...
Merci de vos avis,

Groumphy
"Groumphy" wrote:
Hello,

Saut erreur de ma part, je dois aussi modifier la ligne :


Set objWMIService = GetObject("winmgmts:" _
& "{impersonationLevel=impersonate}!" & strComputer & "rootcimv2")


??

De plus lorsque je remplace la ligne dite, j'ai l'erreur suivante :
Script : monScript.vbs
Line : 11
Char : 1
Error : Object required: '[string: "BXL-WYSE-002"]'
Code : 800A01A8
Source : Microsoft VBScript runtime error


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....

Hello,



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…



Bien à vous,



Groumphy

Hello,



Toujours dans ma quète vers le chemin obscur, je viens de constater que nous pouvons aussi accéder à l’environnement volatile de cette manière.



Set Environnement = WSHShell.Environment("VOLATILE")


Cette ligne peut aussi retourner le [font=Courier:2vyjtbv0]CLIENTNAME[/font:2vyjtbv0]...

C’est décidé, j’abandonne… Pff, vais pas passer 3 ans à tenter de faire cela ! :frowning:

Est-ce que tes terminaux légers sont dans le domaine ?

Une des choses qu’il serait possible de faire c’est de lister le nom de tous les postes clients et après les attaquer en WMI avec un compte admin.

… [BUG]



Mais pourquoi n’y ai-je pas pensé avant !!



Bon récapitulatif :

les terminaux ne sont pas listés dans le domaine, mais nous les connaissons,

toutefois, il est possible de lancer le script WMI avec un compte Admin en local,



donc :

il faut que je crée simplement le script qui lance le script WMI en Admin !

il faut que je teste cela…



… [ loading K.F.In ! ]



Merci pour l’idée !

(je me pend avec mon cable réseau si cela ne fonctionne pas ! :smiley: )

N’oublie pas que psexec est ton ami… ;D

… 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 :slight_smile:



[ 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] …

En gros c’est similaire.



:slight_smile:

Tu exécutes qui sur quoi et comment ? (oups cela peut être louche comme propos :smiley: )

Hum, ah oui c’est louche ;D



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].



Et malgré cela j’obtiens encore des erreurs.



Une idée ?