Page 1 sur 1

[..] Défragmentation

Posté : mer. 09 juin 2010 13:21
par toniino38
Bonjour à tous,

Je souhaite créer un script me permettant de lancer une défragmentation toutes les semaines... pouvez-vous m'aider svp ?

Code : Tout sélectionner

$Ordinateur = @ComputerName
$LogPath = "\\serveur03\patchs\Report\Defrag\" & $Ordinateur & ".txt" 

RunAs ( "pseudoadmin", @ComputerName, "password", "mmc.exe dfrg.msc" , @SystemDir )
;Run ("mmc.exe dfrg.msc",@SystemDir)
WinWaitActive ("Défragmenteur de disque", "Défragmenter")
Send ("{TAB}")
Send ("{ENTER}")
WinWaitActive ("Défragmenteur de disque", "La défragmentation est terminée pour : (C:)")
Send ("{ENTER}")
WinWaitActive ("Rapport de défragmentation")
Send ("{ENTER}")
WinClose ("Défragmenteur de disque")


_FileWriteLog ( $LogPath, $Ordinateur & " a défragmenté son pc." )

#cs 
 SCRIPT FICHIER Log
#ce
Func _FileWriteLog($sLogPath, $sLogMsg)
    ;==============================================
    ; Local Constant/Variable Declaration Section
    ;==============================================
    Local $sDateNow
    Local $sTimeNow
    Local $sMsg
    Local $hOpenFile
    Local $hWriteFile

    $sDateNow = @YEAR & "-" & @MON & "-" & @MDAY
    $sTimeNow = @HOUR & ":" & @MIN & ":" & @SEC
    $sMsg = $sDateNow & " " & $sTimeNow & " : " & $sLogMsg

    $hOpenFile = FileOpen($sLogPath, 1)

    If $hOpenFile = -1 Then
        SetError(1)
        Return 0
    EndIf

    $hWriteFile = FileWriteLine($hOpenFile, $sMsg)

    If $hWriteFile = -1 Then
        SetError(2)
        Return 0
    EndIf

    FileClose($hOpenFile)
    Return 1
EndFunc   ;==>_FileWriteLog
 
Mon problème c'est que en Run tout marche... mais uniquement sur mon poste (je suis admin) mais dès que je veux le lancer sur un autre poste... il bloque.. normal. Donc je test avec un RunAs mais là je n'arrive plus à appeler l'application du defrag...
Ensuite si je pouvais lancer une defrag en silence... Et après voir pour rajouter une fréquence de lancement du script ( par exemple si lundi alors lancer la defrag si autre jour ne rien faire...)

Merci à tous =D

Re: [..] Défragmentation

Posté : mer. 09 juin 2010 15:03
par Tlem
Pour la planification, je vous conseil d'utiliser l'outil de planificateur de taches fournit avec Windows. Vous pouvez gérer l'ajout de taches avec la commande DOS 'AT' qu'il vous sera simple à scripter avec AutoIt.
Il me semble que cela peut aussi être fait en WMI, mais je vous laisserais chercher. ;)

Quand au lancement de la défragmentation en mode silencieux, utilisez :

Code : Tout sélectionner

RunWait(@SystemDir & '\Defrag.exe ' & $Drive & ' -f', "", @SW_HIDE)

Re: [..] Défragmentation

Posté : mer. 09 juin 2010 16:10
par toniino38
Voici mon nouveau code :

Code : Tout sélectionner

$Ordinateur = @ComputerName
$LogPath = "\\serveur03\patchs\Report\Defrag\" & $Ordinateur & ".txt" 
$Drive = "C:\"

#RequireAdmin
RunWait(@SystemDir & '\Defrag.exe ' & $Drive & ' -f', "", @SW_HIDE)
_FileWriteLog ( $LogPath, $Ordinateur & " a défragmenté son pc." )

#cs 
 SCRIPT FICHIER Log
#ce
Func _FileWriteLog($sLogPath, $sLogMsg)
    ;==============================================
    ; Local Constant/Variable Declaration Section
    ;==============================================
    Local $sDateNow
    Local $sTimeNow
    Local $sMsg
    Local $hOpenFile
    Local $hWriteFile

    $sDateNow = @YEAR & "-" & @MON & "-" & @MDAY
    $sTimeNow = @HOUR & ":" & @MIN & ":" & @SEC
    $sMsg = $sDateNow & " " & $sTimeNow & " : " & $sLogMsg

    $hOpenFile = FileOpen($sLogPath, 1)

    If $hOpenFile = -1 Then
        SetError(1)
        Return 0
    EndIf

    $hWriteFile = FileWriteLine($hOpenFile, $sMsg)

    If $hWriteFile = -1 Then
        SetError(2)
        Return 0
    EndIf

    FileClose($hOpenFile)
    Return 1
EndFunc
 
Comment puis-je m'assurer que ce soit bien fonctionnel ?

Merci beaucoup :)

Re: [..] Défragmentation

Posté : mer. 09 juin 2010 16:37
par Tlem
En le lançant ... :P