Récupération d'un résultat d'une commande MS DOS dans une variable

Aide et conseils concernant AutoIt et ses outils.
Règles du forum
.
Répondre
oputti
Niveau 1
Niveau 1
Messages : 3
Enregistré le : jeu. 05 janv. 2017 11:19
Status : Hors ligne

Récupération d'un résultat d'une commande MS DOS dans une variable

#1

Message par oputti »

Bonjour tout le monde j'ai besoin d'aide,

Nous avons devons lancer une connexion wan (windows 8.1) en utilsant la commande
RunWait(@ComSpec & " /c netsh mbn connect interface=""" & $netname & """ connmode=name name=""" & $Provider & """")

Cela fonctionne, normalement par défaut interfacename = Haut débit mobile, mais des fois Haut débit mobile 2 (voir 3,4,5,...)
pour Provider même type de soucis, en règle générale on à Orange F, mais cela peut être par moment Orange F 2 (voir 3,4,5,...)
Pour récupérer ces informations
interfaces: netsh mbn show interface cela donnera par exemple en commande MSdos
C:>netsh mbn show interface

Le système dispose d'une interface :

Nom : Haut débit mobile 2
Description : Sierra Wireless EM7345 4G LTE #2
GUID : {2AD62A87-508F-4645-913F-AB0EACE697ED}
Adresse physique : 00:aa:00:4d:00:01
État : pas connecté
Type d'appareil : L'appareil haut débit mobile est incorporé dans le
système.
Classe cellulaire : GSM
ID de l'appareil : 013937009256056
Fabricant : Sierra Wireless Inc.
Modèle :
Version de micrologiciel : FIH7160_V1.2_WW_01.1442.11
Nom de fournisseur : Orange F
Itinérance : pas d'itinérance
Signal : 35%
RSSI / RSCP : 11 (-91 dBm)

provider: netsh mbn show profile cela donnera par exemple en commande MSdos
C:>netsh mbn show profile

Profils sur l'interface Haut d‚bit mobile 2:
-------------------------------------
Orange F 5

Donc le but est de récupérer Haut débit mobile 2 et Orange F 5 pour les passer dans des variables mais la vraiment je cale.
Help me please.

Merci d'avance.

Olivier
Avatar du membre
ZDS
Membre émérite
Membre émérite
Messages : 554
Enregistré le : jeu. 10 juin 2010 10:35
Localisation : 22300 Cul-d'chouette Langue-de-vache
Status : Hors ligne

Re: Récupération d'un résultat d'une commande MS DOS dans une variable

#2

Message par ZDS »

Bonjour Olivier,
Afin de récupérer les données en sortie de ta commande, il faut que tu utilises StdoutRead, qui te permet de lire la sortie standard d'un process :

Code : Tout sélectionner

Local $cmd = @ComSpec & " /c netsh mbn connect interface=""" & $netname & """ connmode=name name=""" & $Provider & """"
Local $pid = Run($cmd, Default, @SW_HIDE, $STDOUT_CHILD)
ProcessWaitClose($pid)
Local $output = StdoutRead($pid)
Et dans le cas d'un retour sans erreur, tu peux traiter le texte reçu avec des regexp :

Code : Tout sélectionner

Local $pattern = "Nom : ([^\n]+?)\n"
Je te laisse tester, je n'ai pas d'environnement sous la main pour vérifier.
A bientôt !
ZDS : Chef de projet du nAiO (logiciel AutoIt gratuit sous licence CC 4.0 BY-NC-SA)
Tout problème a une solution, donc si il y a pas d'solution, c'est qu'il y a pas d'problème !
Avatar du membre
ZDS
Membre émérite
Membre émérite
Messages : 554
Enregistré le : jeu. 10 juin 2010 10:35
Localisation : 22300 Cul-d'chouette Langue-de-vache
Status : Hors ligne

Re: Récupération d'un résultat d'une commande MS DOS dans une variable

#3

Message par ZDS »

Voila, j'ai pu tester sur un pc avec Autoit, et voici un bout de code qui devrait t'aider :

Code : Tout sélectionner

#include <Constants.au3>

Local $cmd = 'DIR "' & @ScriptDir & '\*.*" /B /A-D /S'
Local $folder = @ScriptDir
Local $pattern = "\\(.*?)\.au3"

Local $result = getRegexpFromCmd($cmd, $folder, $pattern)
MsgBox(0, @error, """"&$result&"""")

Func getRegexpFromCmd($cmd, $folder, $pattern = "", $array = False)
	Local $pid = Run(@ComSpec & " /c "&$cmd, $folder, @SW_HIDE, $STDOUT_CHILD)
	If @error Then Return SetError(1, 0, "") ; ERREUR: Commande incorrecte
	Local $timeout = ProcessWaitClose($pid, 15)
	If @error Or $timeout = 0 Then Return SetError(2, 0, "") ; ERREUR: Exécution trop longue
	Local $output = StdoutRead($pid)
	If @error Or @extended = 0 Then Return SetError(3, 0, "") ; ERREUR: Pas de données sur la sortie standard
	If $pattern = "" Then Return $output ; Si pas de pattern, retourne le resultat de la sortie standard
	Local $matches = StringRegExp($output, $pattern, 1)
	If @error Then Return SetError(4, 0, "") ; ERREUR: Aucun résultat correspondant au pattern
	If $array Then Return $matches ; Si $array, retourne tous les résultats
	Return StringStripCR($matches[0]) ; Retourne le premier résultat
EndFunc
Dans l'exemple ci-dessus, $cmd liste tous les fichiers du répertoire où est exécuté le script, et $pattern isole uniquement le premier fichier au3 trouvé. A toi de tester avec ta propre commande et ton propre pattern... N'ayant pas les interfaces pour exécuter tes commandes netsh, je ne peux que t'aiguiller.
  • Pour récupérer $netname :
    • Local $cmd = 'netsh mbn show interface'
    • Local $pattern = "Nom : ([^\n]*?)\n"
  • pour récupérer $provider :
    • Local $cmd = 'netsh mbn show profile'
    • Local $pattern = "---\n([^\n]*?)\n?$"
Bonne chance !
ZDS : Chef de projet du nAiO (logiciel AutoIt gratuit sous licence CC 4.0 BY-NC-SA)
Tout problème a une solution, donc si il y a pas d'solution, c'est qu'il y a pas d'problème !
oputti
Niveau 1
Niveau 1
Messages : 3
Enregistré le : jeu. 05 janv. 2017 11:19
Status : Hors ligne

Re: Récupération d'un résultat d'une commande MS DOS dans une variable

#4

Message par oputti »

Bonjour,

Merci de ton retour, je teste ça au plus tôt ^^
Olivier
Répondre