defrag auto presque la solution

defrag auto presque la solution - Win NT/2K/XP - Windows & Software

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
Reply

Marsh Posté le 07-12-2004 à 15:11:52   

Reply

Marsh Posté le 08-12-2004 à 00:37:55    

  [:kzimir]


---------------
rEvOhSaLf ©
Reply

Marsh Posté le 08-12-2004 à 02:20:29    

LOL !
good luck !
fait plutot un tour sur le forum de prog. voir codesource....


---------------
bisous a machistador!!!
Reply

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...

Reply

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!!!

Reply

Marsh Posté le 13-12-2004 à 11:14:27    

up

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed