Page 1 sur 1

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

Posté : lun. 12 oct. 2015 16:56
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)
 

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

Posté : lun. 12 oct. 2015 19:08
par Tlem
Votre ligne Run est pas correct.
Regardez l'exemple de la doc de StdoutRead.

Envoyé de mon appareil mobile avec Tapatalk.

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

Posté : lun. 12 oct. 2015 19:10
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)

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

Posté : mar. 13 oct. 2015 09:53
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]

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

Posté : mar. 13 oct. 2015 12:02
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

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

Posté : mer. 14 oct. 2015 14:31
par jcaspar
Merci :lol: beaucoup pour vos conseils

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