Page 1 sur 1
[R] Export clé de registre
Posté : mer. 20 avr. 2011 21:57
par ricky
Hello,
j'aimerais exporter une cle de registre ainsi que toutes les cles en dessous, existe-t-il une fonction ou un udf pour cela? J'ai rien trouve dans la doc ni dans le forum.
Merci d'avance
Re: [..] export clergé registre
Posté : mer. 20 avr. 2011 22:20
par Tlem
ricky a écrit :J'ai rien trouve dans la doc ni dans le forum.
Rhooo, c'est pas beau de dire des mensonges ...
Re: [..] export clergé registre
Posté : mer. 20 avr. 2011 22:21
par Strofe
Re: [..] export clergé registre
Posté : mer. 20 avr. 2011 22:30
par sylvanie
Bonsoir mon fils, confessez vous je suis tout ouïe (cf le superbe dérapage de clavier dans le titre

)
Bon revenons à nos moutons (ou brebis égarées, ok j'arrête ...), je pense malheureusement qu'il va falloir bricoler quelque chose à base de regread et consultant @extended pour connaître le type de la valeur, ou jouer avec regedit en ligne de commande (sûreent plus sage), cf :
http://techsupt.winbatch.com/ts/T000001029F18.html
[EDIT] par moultes croisements de posts, honte à moi d'avoir oublié RegEnumKey
Re: [..] export clergé registre
Posté : mer. 20 avr. 2011 22:41
par Tlem
Re: [..] export clé registre
Posté : jeu. 21 avr. 2011 09:09
par ricky
Tlem a écrit :ricky a écrit :J'ai rien trouve dans la doc ni dans le forum.
Rhooo, c'est pas beau de dire des mensonges ...
A oui, j'ai trouvé, mais je voulais pas réinventer la roue si une existait déjà...
sylvanie a écrit :Bonsoir mon fils, confessez vous je suis tout ouïe (cf le superbe dérapage de clavier dans le titre

)
Pas exactement, plutôt sur mon H*C (pas de pub)

.
Pas mal, merci, c'est ce exactement ce que je cherchais.
Re: [..] export clergé registre
Posté : mer. 04 juil. 2012 16:21
par jerebou
Je sais que c'est un vieux topic, et que je risque de faire un peu tache en posant la question, mais bien que la fonction marche très bien, j'aurais aimé pour pouvoir l'adapter au mieux, pouvoir avoir quelques explications sur la méthode, sachant que le but me concernant est de stocker la totalité des valeurs comprises dans le tableau au sein d'un fichier texte ?
Merci
EDIT: _FileWriteFromArray ??
Comment le faire agir sur un tableau en entier et non sur un seul array de manière individuelle ?
Re: [R] Export clé de registre
Posté : mer. 04 juil. 2012 18:26
par Tlem
En utilisant la fonction
_EnumRegKeys2Array() provenant du lien que vous citez ainsi que la fonction
_Array2DToString() provenant de
cet UDF, voici ce que cela donne :
► Afficher le texte
Code : Tout sélectionner
$aResult = _EnumRegKeys2Array("HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Run")
$sResult = _Array2DToString($aResult, "", "", 0, 1)
If FileExists("test.txt") Then FileDelete("test.txt")
FileWrite("test.txt", $sResult)
ShellExecute("test.txt")
; #FUNCTION# ====================================================================================================================
; Name...........: _Array2DToString
; Description ...: Convert a 1D or a 2D array 2D in a string (each element of the array will be separate by a char)
; Syntax.........: _Array2DToString(Const ByRef $avArray[, $sDelimCol = ""[, $sDelimRow = @CRLF[, $EmptyLine = 1[, $iLineStart = 0, $iLineEnd = 0, $ColStart = 0, $ColEnd = 0]]]]]]])
; Parameters ....: $avArray - Array to convert (1D or 2D)
; $sDelimRow - [optional] Char used for separate lines (Default @CRLF)(can be a string)
; $sDelimCol - [optional] Char used for separate elements (Default "|")(can be a string)
; $EmptyLine - [optional] 0 Don't keep empty lines.
; 1 Keep the empty lines (Default).
; $iLineStart - [optional] Line index to start processing
; $iLineEnd - [optional] Line index to stop processing
; $iColStart - [optional] Column index to start processing
; $iColEnd - [optional] Column index to stop processing
;
; Return values .: Success - Return a string
; Failure - 0, sets @error:
; |1 - $avArray is not an array
; |2 - $avArray has too many dimensions (only up to 2D supported)
; |3 - $$iLineStart is greater than $iLineEnd or $ColStart is greater than $ColEnd
;
; Author ........: Tlem (tlem@tuxolem.fr)
; Modified.......:
; Remarks .......:
; Related .......: _Array2DToHtml
; Link ..........:
; Example .......:
; ===============================================================================================================================
Func _Array2DToString(Const ByRef $avArray, $sDelimRow = "", $sDelimCol = "", $iEmptyLine = 1, $iLineStart = 0, $iLineEnd = 0, $ColStart = 0, $ColEnd = 0)
If Not IsArray($avArray) Then Return SetError(1, 0, 0)
If $sDelimCol = "" Then $sDelimCol = Chr(124)
If $sDelimRow = "" Then $sDelimRow = @CRLF
If $iEmptyLine <> 1 Then $iEmptyLine = 0
; Dimension checking
Local $iDimension = UBound($avArray, 0), $iUBound = UBound($avArray, 1) - 1, $iSubMax = UBound($avArray, 2) - 1
If $iDimension > 2 Then Return SetError(2, 0, 0)
; Bounds checking
If $iLineEnd < 1 Or $iLineEnd > $iUBound Then $iLineEnd = $iUBound
If $ColEnd < 1 Or $ColEnd > $iSubMax Then $ColEnd = $iSubMax
If $iLineStart < 0 Then $iLineStart = 0
If $ColStart < 0 Then $ColStart = 0
If $iLineStart > $iLineEnd Then Return SetError(3, 0, "")
If $ColStart > $ColEnd Then Return SetError(3, 0, "")
Local $avArrayText, $vTmp
; Convert array into text
For $i = $iLineStart To $iLineEnd
For $j = $ColStart To $ColEnd
; Get current line items
$vTmp &= $sDelimCol & $avArray[$i][$j]
Next
; Add line to text array
$vTmp = StringReplace($vTmp, $sDelimCol & $sDelimCol, "", 0, 1)
If StringRight($vTmp, 1) = $sDelimCol Then
$vTmp = StringTrimRight($vTmp, StringLen($sDelimCol))
EndIf
$vTmp = StringTrimLeft($vTmp, StringLen($sDelimCol))
; Check for blank line
If $iEmptyLine = 1 Then
$avArrayText &= $vTmp & $sDelimRow
ElseIf $iEmptyLine = 0 And $vTmp <> "" Then
$avArrayText &= $vTmp & $sDelimRow
EndIf
; Clear $vTmp for next loop
$vTmp = ""
Next
Return $avArrayText
EndFunc ;==>_Array2DToString
;===============================================================================
;
; Function Name: _EnumRegKeys2Array()
; Version: v0.2
; Description: Create an Array of all registry keys and sub-keys at the pointed location
; Parameter(s): $sRegKey - Start Key to enumerate including any sub-keys
; Return Value(s): On Success - Returns an array with RegKeys Name, Value & Type
; On Failure - No error checking yet...
; Author(s): KaFu
; URL: http://www.autoitscript.com/forum/index.php?showtopic=85661
; Last modified: 2008-Dec-22
;
;===============================================================================
;
Func _EnumRegKeys2Array($sRegKey)
Local Const $REG_NONE = 0
Local Const $REG_SZ = 1
Local Const $REG_EXPAND_SZ = 2
Local Const $REG_BINARY = 3
Local Const $REG_DWORD = 4
Local Const $REG_DWORD_BIG_ENDIAN = 5
Local Const $REG_LINK = 6
Local Const $REG_MULTI_SZ = 7
Local Const $REG_RESOURCE_LIST = 8
Local Const $REG_FULL_RESOURCE_DESCRIPTOR = 9
Local Const $REG_RESOURCE_REQUIREMENTS_LIST = 10
Local Const $REG_QWORD = 11 ; Vista
Local $aResult[1][3], $aResult_sub, $i, $y
Local $sRegKey_Name, $sRegKey_Value, $sRegKey_Type
if stringright($sRegKey,1) <> "\" then $sRegKey = $sRegKey & "\"
$aResult[0][0] = "0"
$i = 1
while 1
$sRegKey_Name = RegEnumVal($sRegKey, $i)
if @error then ExitLoop
redim $aResult[ubound($aResult)+1][3]
$aResult[ubound($aResult)-1][0] = $sRegKey & $sRegKey_Name
$sRegKey_Value = RegRead($sRegKey,$sRegKey_Name)
$sRegKey_Type = @extended
if $sRegKey_Type = $REG_NONE then $sRegKey_Type = "REG_NONE"
if $sRegKey_Type = $REG_SZ then $sRegKey_Type = "REG_SZ"
if $sRegKey_Type = $REG_EXPAND_SZ then $sRegKey_Type = "REG_EXPAND_SZ"
if $sRegKey_Type = $REG_BINARY then $sRegKey_Type = "REG_BINARY"
if $sRegKey_Type = $REG_DWORD then $sRegKey_Type = "REG_DWORD"
if $sRegKey_Type = $REG_DWORD_BIG_ENDIAN then $sRegKey_Type = "REG_DWORD_BIG_ENDIAN"
if $sRegKey_Type = $REG_LINK then $sRegKey_Type = "REG_LINK"
if $sRegKey_Type = $REG_MULTI_SZ then $sRegKey_Type = "REG_MULTI_SZ"
if $sRegKey_Type = $REG_RESOURCE_LIST then $sRegKey_Type = "REG_RESOURCE_LIST"
if $sRegKey_Type = $REG_FULL_RESOURCE_DESCRIPTOR then $sRegKey_Type = "REG_FULL_RESOURCE_DESCRIPTOR"
if $sRegKey_Type = $REG_RESOURCE_REQUIREMENTS_LIST then $sRegKey_Type = "REG_RESOURCE_REQUIREMENTS_LIST"
if $sRegKey_Type = $REG_QWORD then $sRegKey_Type = "REG_QWORD" ; Vista
$aResult[ubound($aResult)-1][1] = $sRegKey_Value
$aResult[ubound($aResult)-1][2] = $sRegKey_Type
$i += 1
WEnd
$i = 1
while 1
$sRegKey_Name = RegEnumKey($sRegKey, $i)
if @error then ExitLoop
$aResult_sub = _EnumRegKeys2Array($sRegKey & $sRegKey_Name)
if ubound($aResult_sub) > 1 Then
for $y = 1 to UBound($aResult_sub)-1
redim $aResult[ubound($aResult)+1][3]
$aResult[ubound($aResult)-1][0] = $aResult_sub[$y][0]
$aResult[ubound($aResult)-1][1] = $aResult_sub[$y][1]
$aResult[ubound($aResult)-1][2] = $aResult_sub[$y][2]
next
EndIf
$i += 1
WEnd
$aResult[0][0] = UBound($aResult)-1
return $aResult
EndFunc
Re: [R] Export clé de registre
Posté : jeu. 05 juil. 2012 17:43
par jerebou
Merci bien.
L'avantage, c'est de pouvoir disposer d'un fichier de sortie, mais il ne respecte pas la syntaxe Regedit 5
Je m'explique, le but du script est d'exporter des clés d'un poste d'origine en vue de les réimporter sur le poste de destination, donc dans l’idéal le tableau en question doit être exporté sous la forme d'un fichier *.reg, de telle sorte a être ensuite importé très facilement sur n'importe quel autre poste. Ceci me permettrait d’éviter de devoir créer 2 scripts, le premier qui utiliserait _FileWriteFromArray et le second _FileReadToArray.
A la base, j'avais bien essayé en ligne de commande grâce a reg export mais il ne sait pas utiliser la variable indiquant le chemin a exporter puisque la commande doit être donnée en "dur". L'avantage, c'est qu'il exporte au bon format...

Re: [R] Export clé de registre
Posté : jeu. 05 juil. 2012 18:47
par mikell
Quelque chose comme ça, ça n'irait pas ?
Code : Tout sélectionner
$key = "HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\Run"
Run('regedit /E ' & '.\hklm_run.reg ' & $key)
Re: [R] Export clé de registre
Posté : dim. 08 juil. 2012 11:43
par jerebou
Je valide

Ça marche très bien mais après des dizaines d'essai je comprends pourquoi ça ne passait pas au début: il faut impérativement créer
le fichier reg de sortie le dossier devant contenir le fichier reg de sortie avant de lancer l'instruction
