Habitué à scripter en Autoit j'ai jusqu'à aujourd'hui toujours réussi à me débrouiller pour faire ce que je voulais mais la je coince.
J'ai deux types de fichier à lire, selon le système sur lequel l'autoit sera lancé.
L'idée est de retrouver le nom de la salle dans lequel le PC qui lance l'autoit se trouve, puis venir l'inscrire de manière automatique dans la partie commentaire du Windows.
Voici la version que j'avais faite pour un fichier de type .ini qui fonctionne parfaitement bien.
$cheminfichierini=@ScriptDir & "\gs_net.ini"
Local $description = RegRead("HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\services\LanmanServer\Parameters", "srvcomment")
Local $posteprof = StringInStr($description,"Poste Prof",0) ; on vérifie que le nom du poste n'est pas renseigné à la main
if $posteprof = 0 Then
dim $ini = $cheminfichierini ; on place le fichier ini dans une variable pour éviter de le ré-écrire.
$lopsection = IniReadSectionNames($ini) ; On place notre commande dans une variable
For $j = 1 To $lopsection[0] ;on commence la boucle pour analyser ligne par ligne le fichier
$lop = IniReadSection($ini,$lopsection[$j]) ; on appelle la commande placée dans une variable
if $lopsection[$j] = "POSTES" Then
For $i = 1 To $lop[0][0] ; on s'apprête à lire toutes les lignes de la section [POSTES]
if $lop[$i][0] = @ComputerName Then ; on cherche si le nom de poste est existant dans la section
Local $salle =StringSplit($lop[$i][1],",") ; on découpe la chaine de caractère pour récuperer le nom de la salle
RegWrite("HKEY_LOCAL_MACHINE\SYSTEM\ControlSet001\Services\LanmanServer\Parameters", "srvcomment", "REG_SZ", $salle[1]) ; on écrit la valeur dans la base de registre
EndIf
next
endIf
Next
EndIf
Local $description = RegRead("HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\services\LanmanServer\Parameters", "srvcomment")
Local $posteprof = StringInStr($description,"Poste Prof",0) ; on vérifie que le nom du poste n'est pas renseigné à la main
if $posteprof = 0 Then
dim $ini = $cheminfichierini ; on place le fichier ini dans une variable pour éviter de le ré-écrire.
$lopsection = IniReadSectionNames($ini) ; On place notre commande dans une variable
For $j = 1 To $lopsection[0] ;on commence la boucle pour analyser ligne par ligne le fichier
$lop = IniReadSection($ini,$lopsection[$j]) ; on appelle la commande placée dans une variable
if $lopsection[$j] = "POSTES" Then
For $i = 1 To $lop[0][0] ; on s'apprête à lire toutes les lignes de la section [POSTES]
if $lop[$i][0] = @ComputerName Then ; on cherche si le nom de poste est existant dans la section
Local $salle =StringSplit($lop[$i][1],",") ; on découpe la chaine de caractère pour récuperer le nom de la salle
RegWrite("HKEY_LOCAL_MACHINE\SYSTEM\ControlSet001\Services\LanmanServer\Parameters", "srvcomment", "REG_SZ", $salle[1]) ; on écrit la valeur dans la base de registre
EndIf
next
endIf
Next
EndIf
Sur un autre controleur de domaine, je dois également lire dans un fichier mais cette fois ci en format XML et faire la même chose. Voici un extrait du format du XML, car l'original est beaucoup plus long :
<?xml version="1.0" encoding="ISO-8859-1"?>
<ESU_LGM>
<ListeGM>
<GM nom="salle-admin_(w7-64)">
<ListeMachines>
<Machine>PC-00001-JSE</Machine>
</ListeMachines>
<ListeGestionnaires/>
</GM>
<GM nom="salle-a106_(w7-64)">
<ListeMachines>
<Machine>PC-00242-JSE</Machine>
</ListeMachines>
<ListeGestionnaires/>
</GM>
<GM nom="salle-a107_(w7-64)">
<ListeMachines>
<Machine>PC-00241-JSE</Machine>
</ListeMachines>
<ListeGestionnaires/>
</GM>
<GM nom="salle-a108_(w7-64)">
<ListeMachines>
<Machine>PC-00002-JSE</Machine>
<Machine>PC-00003-JSE</Machine>
<Machine>PC-00004-JSE</Machine>
<Machine>PC-00005-JSE</Machine>
<Machine>PC-00006-JSE</Machine>
<Machine>PC-00007-JSE</Machine>
<Machine>PC-00008-JSE</Machine>
<Machine>PC-00009-JSE</Machine>
<Machine>PC-00010-JSE</Machine>
<Machine>PC-00011-JSE</Machine>
<Machine>PC-00012-JSE</Machine>
<Machine>PC-00013-JSE</Machine>
<Machine>PC-00014-JSE</Machine>
<Machine>PC-00015-JSE</Machine>
<Machine>PC-00016-JSE</Machine>
<Machine>PC-00017-JSE</Machine>
<Machine>PC-00018-JSE</Machine>
<Machine>PC-00019-JSE</Machine>
<Machine>PC-00020-JSE</Machine>
<Machine>PC-00021-JSE</Machine>
<Machine>PC-00022-JSE</Machine>
</ListeMachines>
<ListeGestionnaires/>
</GM>
<GM nom="salle-a109_(w7-64)">
<ListeMachines>
<Machine>PC-00023-JSE</Machine>
<Machine>PC-00024-JSE</Machine>
<Machine>PC-00025-JSE</Machine>
<Machine>PC-00026-JSE</Machine>
<Machine>PC-00027-JSE</Machine>
<Machine>PC-00041-JSE</Machine>
<Machine>PC-00028-JSE</Machine>
<Machine>PC-00029-JSE</Machine>
<Machine>PC-00030-JSE</Machine>
<Machine>PC-00031-JSE</Machine>
<Machine>PC-00032-JSE</Machine>
<Machine>PC-00033-JSE</Machine>
<Machine>PC-00034-JSE</Machine>
<Machine>PC-00035-JSE</Machine>
<Machine>PC-00036-JSE</Machine>
<Machine>PC-00037-JSE</Machine>
<Machine>PC-00038-JSE</Machine>
<Machine>PC-00039-JSE</Machine>
<Machine>PC-00040-JSE</Machine>
<Machine>PC-00042-JSE</Machine>
<Machine>PC-00043-JSE</Machine>
<Machine>PC-00044-JSE</Machine>
<Machine>PC-00045-JSE</Machine>
</ListeMachines>
<ListeGestionnaires/>
</GM>
</ListeGM>
<numeroSerie>PurbOMkeVKOiojj1tjYY0txlnjU=</numeroSerie>
<ListeGestionnaires/>
</ESU_LGM>
<ESU_LGM>
<ListeGM>
<GM nom="salle-admin_(w7-64)">
<ListeMachines>
<Machine>PC-00001-JSE</Machine>
</ListeMachines>
<ListeGestionnaires/>
</GM>
<GM nom="salle-a106_(w7-64)">
<ListeMachines>
<Machine>PC-00242-JSE</Machine>
</ListeMachines>
<ListeGestionnaires/>
</GM>
<GM nom="salle-a107_(w7-64)">
<ListeMachines>
<Machine>PC-00241-JSE</Machine>
</ListeMachines>
<ListeGestionnaires/>
</GM>
<GM nom="salle-a108_(w7-64)">
<ListeMachines>
<Machine>PC-00002-JSE</Machine>
<Machine>PC-00003-JSE</Machine>
<Machine>PC-00004-JSE</Machine>
<Machine>PC-00005-JSE</Machine>
<Machine>PC-00006-JSE</Machine>
<Machine>PC-00007-JSE</Machine>
<Machine>PC-00008-JSE</Machine>
<Machine>PC-00009-JSE</Machine>
<Machine>PC-00010-JSE</Machine>
<Machine>PC-00011-JSE</Machine>
<Machine>PC-00012-JSE</Machine>
<Machine>PC-00013-JSE</Machine>
<Machine>PC-00014-JSE</Machine>
<Machine>PC-00015-JSE</Machine>
<Machine>PC-00016-JSE</Machine>
<Machine>PC-00017-JSE</Machine>
<Machine>PC-00018-JSE</Machine>
<Machine>PC-00019-JSE</Machine>
<Machine>PC-00020-JSE</Machine>
<Machine>PC-00021-JSE</Machine>
<Machine>PC-00022-JSE</Machine>
</ListeMachines>
<ListeGestionnaires/>
</GM>
<GM nom="salle-a109_(w7-64)">
<ListeMachines>
<Machine>PC-00023-JSE</Machine>
<Machine>PC-00024-JSE</Machine>
<Machine>PC-00025-JSE</Machine>
<Machine>PC-00026-JSE</Machine>
<Machine>PC-00027-JSE</Machine>
<Machine>PC-00041-JSE</Machine>
<Machine>PC-00028-JSE</Machine>
<Machine>PC-00029-JSE</Machine>
<Machine>PC-00030-JSE</Machine>
<Machine>PC-00031-JSE</Machine>
<Machine>PC-00032-JSE</Machine>
<Machine>PC-00033-JSE</Machine>
<Machine>PC-00034-JSE</Machine>
<Machine>PC-00035-JSE</Machine>
<Machine>PC-00036-JSE</Machine>
<Machine>PC-00037-JSE</Machine>
<Machine>PC-00038-JSE</Machine>
<Machine>PC-00039-JSE</Machine>
<Machine>PC-00040-JSE</Machine>
<Machine>PC-00042-JSE</Machine>
<Machine>PC-00043-JSE</Machine>
<Machine>PC-00044-JSE</Machine>
<Machine>PC-00045-JSE</Machine>
</ListeMachines>
<ListeGestionnaires/>
</GM>
</ListeGM>
<numeroSerie>PurbOMkeVKOiojj1tjYY0txlnjU=</numeroSerie>
<ListeGestionnaires/>
</ESU_LGM>
Mon besoin est donc de retrouver en fonction du nom de l'ordinateur @Computername sur lequel se lance l'autoit, le nom de la salle dans laquelle il est et l'écrire dans la base de registre avec la commande :
RegWrite("HKEY_LOCAL_MACHINE\SYSTEM\ControlSet001\Services\LanmanServer\Parameters", "srvcomment", "REG_SZ", $salle[1]) ; on écrit la valeur dans la base de registre