[..] Exporter infos de la console dans un fichier texte

Aide et conseils concernant AutoIt et ses outils.
Règles du forum
.
Répondre
jcaspar
Niveau 7
Niveau 7
Messages : 449
Enregistré le : mar. 23 sept. 2008 17:58
Status : Hors ligne

[..] Exporter infos de la console dans un fichier texte

#1

Message par jcaspar »

B :D onjour à tous !

Je souhaiterais récupérer les informations de la console dans un fichier texte
mon idée était d'utiliser StdoutRead et StdinWrite mais bon cela n'as pas l'air de fonctionner ...

Pouvez vous svp m'indiquer comment procéder

En vous remerciant pour vos conseils et idées. :mrgreen:

Code : Tout sélectionner

ocal $hFile="infos.txt"
$CMD = 'arp -a '
$foo = Run('"' & @ComSpec & '" /k ' & $CMD, @SystemDir,@SW_HIDE)
$Text = StdoutRead($foo)
FileWrite($hFile, StdinWrite($Text))
FileClose($hFile)
ShellExecuteWait($hFile)
 
Avatar du membre
Tlem
Site Admin
Site Admin
Messages : 11812
Enregistré le : ven. 20 juil. 2007 21:00
Localisation : Bordeaux
Status : Hors ligne

Re: [..] Exporter infos de la console dans un fichier texte

#2

Message par Tlem »

Votre ligne Run est pas correct.
Regardez l'exemple de la doc de StdoutRead.

Envoyé de mon appareil mobile avec Tapatalk.
Thierry

Rechercher sur le forum ----- Les règles du forum
Le "ça ne marche pas" est une conséquence commune découlant de beaucoup trop de raisons potentielles ...

Une idée ne peut pas appartenir à quelqu'un. (Albert Jacquard) tiré du documentaire "Copié n'est pas volé".
Avatar du membre
orax
Modérateur
Modérateur
Messages : 1479
Enregistré le : lun. 23 mars 2009 04:50
Localisation : ::1
Status : Hors ligne

Re: [..] Exporter infos de la console dans un fichier texte

#3

Message par orax »

Il manquait $STDOUT_CHILD et ProcessWaitClose (à moins de mettre une boucle à la place de ProcessWaitClose ; voir l'exemple de StderrRead).
Le /k va laisser l'invite de commande ouverte après la commande et on ne le verra même pas à cause de @SW_HIDE. C'est /c qu'il convient plutôt d'utiliser.
FileClose n'est pas nécessaire puisqu'il n'y a pas eu de FileOpen.

Code : Tout sélectionner

#include <AutoItConstants.au3>
local $hFile="infos.txt"
$CMD = 'arp -a'
$foo = Run($CMD, @SystemDir,@SW_HIDE, $STDOUT_CHILD)
; ou...
;~ $foo = Run(@ComSpec & " /c " & $CMD, @SystemDir,@SW_HIDE, $STDOUT_CHILD)
ProcessWaitClose($foo)
$Text = StdoutRead($foo)
FileWrite($hFile, $Text)
ShellExecuteWait($hFile)
De petits détails peuvent faire toute la différence. — Quand la boule de neige commence à rouler… poussez-la. (Columbo)
jcaspar
Niveau 7
Niveau 7
Messages : 449
Enregistré le : mar. 23 sept. 2008 17:58
Status : Hors ligne

Re: [..] Exporter infos de la console dans un fichier texte

#4

Message par jcaspar »

Merci beaucoup pour votre réponse !

J'aurais besoin de petites précisions complémentaires car je souhaiterais exécuter plusieurs commandes à la suite
je pensais faire cela de la manière suivante .. mais la syntaxe n'a pas l'air bonne car par exemple pour arp-a
la commande ne s'excute pas normalement mais l'aide s'affiche ....et autre petit soucis comment échapper
le caractère /

En vous remerciant pour vos conseils

Jean-Marc


► Afficher le texte
[/spoiler]
Avatar du membre
jchd
AutoIt MVPs (MVP)
AutoIt MVPs (MVP)
Messages : 2284
Enregistré le : lun. 30 mars 2009 22:57
Localisation : Sud-Ouest de la France (43.622788,-1.260864)
Status : Hors ligne

Re: [..] Exporter infos de la console dans un fichier texte

#5

Message par jchd »

Tu t'es compliqué la vie avec tes chaînes. C'est pas plutôt ça que tu veux :

Code : Tout sélectionner

local $hFile="infos.txt"
$CMD = _
    'arp -a && ' & _
    'net view && ' & _
    'route print && ' & _
    'net share && ' & _
    'net localgroup && ' & _
    'net use && ' & _
    'tasklist /svc && ' & _
    'wmic useraccount list && ' & _
    'gpresult /SCOPE COMPUTER /Z'
$foo = Run(@ComSpec & " /c " & $CMD, @SystemDir, @SW_HIDE, $STDOUT_CHILD)
ProcessWaitClose($foo)
$Text = StdoutRead($foo)
FileWrite($hFile, $Text)
ShellExecuteWait($hFile)
Tu aurais même intérêt à convertir le texte capturé si la console DOS est paramétrée comme par défaut (jeu OEM) :

Code : Tout sélectionner

...
$Text = StdoutRead($foo)
$Text = _CodepageToStr($Text)
FileDelete($hFile)     ; si on ne veut pas risquer l'accumulation de texte.
FileWrite($hFile, $Text)
ShellExecuteWait($hFile)

Func _CodepageToStr($sCP, $iCodepage = Default)
    If $iCodepage = Default Then $iCodepage = Int(RegRead("HKLM\SYSTEM\CurrentControlSet\Control\Nls\Codepage", "OEMCP"))
    Local $tText = DllStructCreate("byte[" & StringLen($sCP) & "]")
    DllStructSetData($tText, 1, $sCP)
    Local $aResult = DllCall("kernel32.dll", "int", "MultiByteToWideChar", "uint", $iCodepage, "dword", 0, "struct*", $tText, "int", StringLen($sCP), _
            "ptr", 0, "int", 0)
    Local $tWstr = DllStructCreate("wchar[" & $aResult[0] & "]")
    $aResult = DllCall("kernel32.dll", "int", "MultiByteToWideChar", "uint", $iCodepage, "dword", 0, "struct*", $tText, "int", StringLen($sCP), _
            "struct*", $tWstr, "int", $aResult[0])
    Return DllStructGetData($tWstr, 1)
EndFunc   ;==>_CodepageToStr
La cryptographie d'aujourd'hui c'est le taquin plus l'électricité.
jcaspar
Niveau 7
Niveau 7
Messages : 449
Enregistré le : mar. 23 sept. 2008 17:58
Status : Hors ligne

Re: [..] Exporter infos de la console dans un fichier texte

#6

Message par jcaspar »

Merci :lol: beaucoup pour vos conseils

Ai pensé à une solution un peu différente ...
► Afficher le texte
Répondre