Page 1 sur 1

[R] RunAs + FileCopy

Posté : ven. 27 févr. 2009 11:46
par Vash
Bonjour,

je suis débutant et je souhaiterais mettre en place un script de connexion qui:
- s'execute en tant qu'administrateur du domaine
- regarde la date de modification du fichier host
- remplace le fichier host windows par un fichier host type se trouvant sur un chemin réseau si la date de modification est inferieur à celle renseigné

Pour l'instant j'en suis à :

Code : Tout sélectionner

Global $sUserName = "administrateur"
Global $sPassword = "passadmin
Global $sDomaine = "domaine"
Global $sFic = "C:\WINDOWS\system32\drivers\etc\hosts"
Global $sDateModif = FileGetTime($sFic, 0, 1)

if $sDateModif < 20090228000000 Then
    RunAsWait($sUserName, $sDomaine, $sPassword, 0, @ScriptFullPath, @ScriptDir)
    FileCopy("\\serveur\chemin\hosts", "C:\WINDOWS\system32\drivers\etc\hosts", 9)
EndIf

Exit
Au niveau du FileCopy, ne sachant pas trop, j'ai essayé avec /etc/ et /etc/hosts mais aucune différence n'apparait.

De plus, je ne sais pas quoi mettre au niveau du RunAsWait apres le flag puisque je ne souhaite executer aucun programme ... =/

Comme vous pouvez vous en douter, le script ne fonctionne pas (bien qu'il s'execute sans erreur)

Je suis un peu perdu au niveau de ces commandes (peut être ne dois-je pas utilisé RunAsWait ?) c'est pourquoi je solicite votre aide

Merci

Re: [..] RunAs + FileCopy

Posté : ven. 27 févr. 2009 15:09
par Vash
Je commence à comprendre un peu mieux, j'ai réussi a faire ce que je voulais ne passant par un .bat avec :

Code : Tout sélectionner

RunAsWait($sUserName, $sDomaine, $sPassword, 0, "\\serveur\chemin\copy.bat", "\\serveur\chemin\")
Le .bat s'occupant de la copie du fichier ....

Cependant je souhaiterais toujours savoir si la meme chose est possible sans le .bat, avec juste un .au3

Merci

Re: [..] RunAs + FileCopy

Posté : ven. 27 févr. 2009 21:31
par FernandG
Bonjour,

Par défaut le dossier "etc" est qu'en lecture pour les utilisateurs (non administrateur), domaine ou pas.

A partir de là, plusieurs solutions s'offrent à toi et tu en as déjà évoqué une. Tu veux sans ton ".bat", alors :

- Autoriser les utilisateurs de ton domaine à écrire dans le dossier "etc" et par conséquent autoriser la copie du fichier hosts. Et tu enchaineras par la suite avec un simple FileCopy :

Code : Tout sélectionner

RunAsWait($sUserName, $sDomaine, $sPassword, 0, @Comspec & " /c cacls " & @SystemDir & '\Drivers\etc /t /e /g "Utilisateurs Authentifiés":C', @SystemDir & "\Drivers\etc", @SW_HIDE)
- Exécuter la copie du fichier hosts à travers un RunAs(Wait) :

Code : Tout sélectionner

RunAsWait($sUserName, $sDomaine, $sPassword, 0, @Comspec & " /c copy \\serveur\chemin\hosts " & @SystemDir & "\drivers\etc /y", @SW_HIDE)
 
- Vérifier que ton programme s'exécute avec les droits "d'admin" et faire un simple FileCopy. Justement ce sujet a été évoqué recement sur le post ici.

Concernant ton code, pourquoi ne pas y mettre directement une condition de vérification automatique des deux fichiers au lieu de mettre cette vérification en dur ?! En effet, dans ton code tu mets la date 20090228000000. Donc tu devras la modifier à chaque changement de ton fichier hosts, non ? Pour t'éviter toute modification en cas de changement de ton fichier hosts, voici un petit exemple :

Code : Tout sélectionner

If FileGetTime("\\serveur\chemin\hosts", 0, 1) > FileGetTime(@SystemDir & "\drivers\etc\hosts", 0, 1) Then
    ...
    ...
EndIf
Ces quelques pistes devront t'aider dans le suite de ton script.

Bonne soirée.
AutoITement.

Re: [..] RunAs + FileCopy

Posté : lun. 02 mars 2009 09:08
par Vash
Oui merci beaucoup pour toutes ces informations, j'vais tester ca =)

Sinon, je pensais mettre la date en dur car comme le fichier est sur un lecteur réseau commun, si jamais quelqu'un de mal intentioné vener a le modifier il serais copier sur tous les PC qui disposent encore d'un vieux fichier host.

Et encore merci pour cette réponse très complete

Re: [R] RunAs + FileCopy

Posté : lun. 02 mars 2009 10:06
par Vash
Du coup ca me donne :

VBS:

Code : Tout sélectionner

option explicit

Dim f
Dim WshShell
Dim fso

Set WshShell = WScript.CreateObject("WScript.Shell") 
Set fso = CreateObject("Scripting.FileSystemObject")
Set f = fso.GetFile("C:\WINDOWS\system32\drivers\etc\hosts")

If (f.DateLastModified) < "02/03/2009 00:00:00" Then
    WshShell.Run "\\serveur\chemin\hosts.exe"
end if

Wscript.Quit
AutoIt :

Code : Tout sélectionner

Global $sUserName = "admin"
Global $sPassword = "pass"
Global $sDomaine = "domaine"

RunAsWait($sUserName, $sDomaine, $sPassword, 0, @Comspec & " /c cacls " & @SystemDir & '\Drivers\etc /t /e /g "Utilisateurs Authentifiés":C', @SystemDir & "\Drivers\etc", @SW_HIDE)
FileCopy("\\serveur\chemin\hosts", "C:\WINDOWS\system32\drivers\etc\", 9)

Exit
Ce qui fonctionne bien =)