defrag auto presque la solution - Win NT/2K/XP - Windows & Software
Marsh Posté le 08-12-2004 à 02:20:29
LOL !
good luck !
fait plutot un tour sur le forum de prog. voir codesource....
Marsh Posté le 08-12-2004 à 02:25:13
Je ne sais pas comment son configurées tes machines, mais si elles sont programmées pour se locker automatiquement, tu risques d'avoir des problèmes, AutoIT a besoin du user desktop environement pour tourner convenablement...
qu'est-ce que tu veux faire exactement, ta demande n'est pas clair...
Marsh Posté le 08-12-2004 à 09:20:24
hé bien,
Quand l'utilisateur est connecté,j'aimerais que la defragmentation de son c: se lance automatiquement une fois tous les 15jours..
Quels genres de soucis je peux avoir si les machines se lockent automatiquement?
et qu'est ce que user desktop environement?pk autoit en a besoin?(bon je marque ca mais je v faire une recherche ds google de suite ;-))
merci pour ses reponses!!!
Marsh Posté le 07-12-2004 à 15:11:52
Salut,
j'essaie de trouver une solution pour pouvoir defragmenter mes w2k clients automatiquement et sans droits administrateurs.
J'ai trouvé un premier script xrunas.vbs, ce script permet de lancer ma console de defragmentation
xrunas /profile /user:domaine\administateur /pwd:****** "mmc %windir%\system32\dfrg.msc"
mais ce script ne lance pas automatiquement la defragmentation du c:.
j'ai egalement trouvé un petit log qui s'appelle autoit, lui il permet de lancer une defragmentation automatique du c: sans aucune intervention mais par contre on doit etre logger en admin(marche bien sur les serveurs).
Donc j'aimerais faire en gros une soupe de ces deux scripts avec les avantages de chacun d'eux a savoir:
1-lancer la console de defrag sans droits admin automatiquement
2-lancer la degragmentation du c: automatiquement
voici le script de xrunas:
' ---------------------------------------------------------------------
' Script de lancement d'application avec RUNAS
' Syntaxe identique à RUNAS mais avec en plus passage du mot de passe
'
' Syntaxe:
' XRUNAS [/profile] [/env] [/netonly] /user:<NomUtilisateur> /pwd:<password> programme
' /profile si le profil de l'utilisateur doit être chargé
' /env pour utiliser l'environnement en cours à la place de
' celui de l'utilisateur.
' /netonly à utiliser si les informations d'identification spécifiées
' sont pour l'accès à distance seulement.
' /user <NomUtilisateur> sous la forme UTILISATEUR@DOMAINE
' ou DOMAINE\UTILISATEUR
' /pwd <password> : le mot de passe
' programme ligne de commande pour EXE.
'
' ---------------------------------------------------------------------
Const SW_HIDE=0
Const SW_SHOWNORMAL=1
Dim shell, args, fso, erreur
Set net = Wscript.CreateObject("WScript.Network" )
Set shell = WScript.CreateObject("WScript.Shell" )
Set fso = WScript.CreateObject("Scripting.FileSystemObject" )
Set args = Wscript.Arguments
nbargs=args.count
Title=shell.ExpandEnvironmentStrings("%systemroot%" ) & "\system32\runas.exe"
If not fso.FileExists(Title) Then
msg="Commande " & Title & " non trouvée" & VBCRLF
msg=msg & "Ce script ne fonctionne que sous Windows 2000 et au delà" & VBCRLF
wscript.echo msg
wscript.quit
End If
If nbargs=0 or testarg("?" ) or testarg("h" ) Then Syntaxe ""
defmoteur="cscript"
TestHost true
erreur=false
profile=""
env=""
netonly=""
If testarg("profile" ) Then profile="/profile "
If testarg("env" ) Then env="/env "
If testarg("netonly" ) Then netonly="/netonly "
If testarg("user:" ) Then user=getarg("user:" ) else MsgErr("Utilisateur absent" )
If testarg("pwd:" ) Then pwd=getarg("pwd:" ) else MsgErr("Mot de passe absent" )
testprog=false
For i = 0 To nbargs-1
curarg=args(i)
If left(curarg,1)<>"/" and left(curarg,1)<>"-" Then
programme=curarg
testprog=true
exit for
End If
Next
If not testprog then MsgErr("Programme absent" )
If erreur Then Syntaxe "erreur"
Commande="runas " & profile & env & netonly & "/user:" & user & " """ & programme & """"
shell.run Commande,SW_SHOWNORMAL
Title=shell.ExpandEnvironmentStrings("%systemroot%" ) & "\system32\runas.exe"
shell.AppActivate Title
WScript.Sleep 150
shell.SendKeys pwd & "~"
Wscript.quit
'--------------------------------------------------------------------
Function testarg(param)
testarg=false
For i = 0 To nbargs-1
curarg=lcase(args(i))
If left(curarg,1)="/" or left(curarg,1)="-" Then
If mid(curarg,2,len(param))=param Then
testarg=true
exit function
End If
End If
Next
End Function
'--------------------------------------------------------------------
Function getarg(param)
getarg=""
For i = 0 To nbargs-1
curarg=lcase(args(i))
If left(curarg,1)="/" or left(curarg,1)="-" Then
If mid(curarg,2,len(param))=param Then
getarg=mid(args(i),2+len(param))
exit function
End If
End If
Next
End Function
'--------------------------------------------------------------------
Sub MsgErr(msg)
wscript.echo "Erreur : " & msg
erreur=true
End Sub
'--------------------------------------------------------------------
' Sous programme de test du moteur
Sub TestHost(force)
dim rep
strappli=lcase(Wscript.ScriptFullName)
strFullName =lcase(WScript.FullName)
i=InStr(1,strFullName,".exe",1)
j=InStrRev(strFullName,"\",i,1)
strCommand=Mid(strFullName,j+1,i-j-1)
if strCommand<>"cscript" then
If force then
Init="Ce script doit être lancé avec CSCRIPT"
Else
Init="Il est préférable de lancer ce script avec CSCRIPT"
End If
rep=MsgBox(Init & VBCRLF & _
"Cela peut être rendu permanent avec la commande" & VBCRLF & _
"cscript //H:CScript //S /Nologo" & VBCRLF & _
"Voulez-vous que ce soit fait automatiquement?", _
vbYesNo + vbQuestion,strappli)
if rep=vbYes then
nomcmd="setscript.bat"
Set ficcmd = fso.CreateTextFile(nomcmd)
ficcmd.writeline "@echo off"
ficcmd.writeline "cscript //H:CScript //S /Nologo"
ficcmd.writeline "pause"
params=""
For i = 0 To nbargs-1
params=params & " " & args(i)
next
ficcmd.writeline chr(34) & strappli & chr(34) & params
ficcmd.writeline "pause"
ficcmd.close
shell.Run nomcmd, SW_SHOWNORMAL,true
force=true
end if
If force then WScript.Quit
end if
end sub
'--------------------------------------------------------------------
Sub Syntaxe(info)
If info="" Then
msg= "Script VBS de lancement d'application avec RUNAS" & VBCRLF
msg=msg & "avec passage en paramètre du mot de passe" & VBCRLF & VBCRLF
msg=msg & "JC BELLAMY © 2002" & VBCRLF
End If
msg=msg & "------------------------------------------" & VBCRLF
msg=msg & "Syntaxe : " & VBCRLF
msg=msg & " XRUNAS [/profile] [/env] [/netonly] /user:<compte> /pwd:<password> commande" & VBCRLF
msg=msg & "Paramètres :" & VBCRLF
msg=msg & " /profile si le profil de l'utilisateur doit être chargé" & VBCRLF
msg=msg & " /env pour utiliser l'environnement en cours à la place de" & VBCRLF
msg=msg & " celui de l'utilisateur." & VBCRLF
msg=msg & " /netonly à utiliser si les informations d'identification spécifiées" & VBCRLF
msg=msg & " sont pour l'accès à distance seulement." & VBCRLF
msg=msg & " /user <compte> sous la forme UTILISATEUR@DOMAINE" & VBCRLF
msg=msg & " ou UTILISATEUR ou DOMAINE\UTILISATEUR" & VBCRLF
msg=msg & " /pwd <password> : le mot de passe" & VBCRLF
msg=msg & " NB : sensible à la casse (minuscules/majuscules)" & VBCRLF
msg=msg & " commande commande à exécuter" & VBCRLF & VBCRLF
msg=msg & "Exemples :" & VBCRLF
msg=msg & "> xrunas /profile /user:administrateur /pwd:toto cmd" & VBCRLF
msg=msg & "> xrunas /profile /env /user:MonDomaine\admin /pwd:truc ""mmc %windir%\system32\dsa.msc"" " & VBCRLF
msg=msg & "> xrunas /env /user:utilisateur@domaine.microsoft.com /pwd:bill ""notepad \""Fichier.txt\"" " & VBCRLF & VBCRLF
msg=msg & "NB: vu que le mot de passe est visible, ce script ne doit être utilisé" & VBCRLF
msg=msg & " qu'en des circonstances bien particulières!" & VBCRLF
msg=msg & " USER@DOMAIN n'est pas compatible avec /netonly." & VBCRLF & VBCRLF
wscript.echo msg
wscript.quit
End Sub
' -------------------------------------
et voici le script de autoit:
;
; AutoIt Version: 3.0
; Language: Français
; Platform: Win2000
; Function: Lance le défragmenteur sur C: (modification possible du script pour une autre lettre)
;
;
; Configuration
;
Dim $dir = IniRead("autodefrag.ini", "Options", "Dir", "C:" )
Dim $defrag_anyway = IniRead("autodefrag.ini", "Options", "Defrag_anyway", 1)
Dim $caption = IniRead("autodefrag.ini", "Config", "Caption", "Défragmenteur de disque" )
Dim $report = IniRead("autodefrag.ini", "Config", "Report", "Défragmentation terminée" )
Dim $alert = IniRead("autodefrag.ini", "Config", "Alert", "Voulez-vous néanmoins exécuter la défragmentation maintenant ?" )
Dim $useless = IniRead("autodefrag.ini", "Config", "Useless", "Il ne vous est pas nécessaire de défragmenter ce volume." )
;
; One-Instance (AutoDefrag)
;
Dim $Product = "AutoDefrag 1.0"
If WinExists($Product) Then
Exit
EndIf
AutoItWinSetTitle($Product)
;
; One-Instance (dfrg)
;
If WinExists($caption) Then
MsgBox(0, "Error", "An instance of Win2k dfrg.msc is already running. AutoDefrag will now exit." )
Exit
EndIf
;
; Run defrag
;
Run("mmc.exe " & EnvGet("systemroot" ) & "\\system32\\dfrg.msc " & $dir)
WinWaitActive($caption)
Send("{TAB 3}" )
Send("{SPACE}" )
; défragmentation en cours
Dim $end = 0
while Not $end
If Not WinExists($caption) Then
MsgBox(0, "Error", "The instance of Win2k dfrg.msc has been unexpectedly killed. AutoDefrag will now exit." )
Exit
Endif
If WinActive($caption,$alert) Or WinActive($caption,$useless) Then
; Espace libre insuffisant ou défragmentation inutile
; Continuer / Fermer ou Rapport / Continuer / Fermer
If WinActive($caption,$useless) Then
Send("{TAB}" )
EndIf
If $defrag_anyway == 0 Then
Send("{TAB}" )
$end = 1
EndIf
Send("{ENTER}" )
EndIf
If WinActive($report) Then
Send("{ESCAPE}" )
$end = 1
EndIf
WEnd
WinClose($caption)
Il faudrait rajouter :
WinWaitActive($caption)
Send("{TAB 3}" )
Send("{SPACE}" )
dans le 1er script pour que la defrag se lance auto
mais jy arrive pas mes connaissances etant limité en vbs...
Message édité par evangelion1ooo le 07-12-2004 à 15:22:53