nixnbk Strip the flesh salt the wound | Bon Problème résolu. Je met le script en guise de source.
#==========================================================================
#~~[comment]~~
#AUTEUR : NixNBK
#Ce Script Permet de supprimer des fichiers vieux de plus de X jours dans une arborescence de fichiers
#Le script fonctionne avec 3 arguments :
#1er Argument : Chemin du répertoire à scanner #2e Argument : Nombre de jours
#3e Argument : Chemin du répertoire de log
#La commande s'ecrit donc : .\scriptsupprfichier.ps1 "X:\repertoire_scan" 10 "X:\repertoirelog"
#Attention à ne pas mettre pour le répertoire de log un anti-slash à la fin. Le script le fait déjà.
#Les logs sont au format :suppression_log_AAAA-MM-JJ.log
#Il faut modifier certains paramètres du script, notemment dans la partie mail, ou le serveur mail, l'expediteur
#et le destinataire sont à mettre à jour.
#~~[/comment]~~
#==========================================================================
$cheminlog=$args[2]
$datejour=get-date -uformat "%Y-%m-%d" $fichierlog=$args[2]+"\suppression_log_"+$datejour+".log"
#==========================================================================
# SETTING 0 : Démarrage du log
#==========================================================================
Start-Transcript -path $fichierlog
#==========================================================================
# SETTING 1 : Le répertoire à scanner.
#==========================================================================
$mydata = $args[0]
#==========================================================================
# SETTING 2 : Nombre de jours
#==========================================================================
$day = $args[1]
#==========================================================================
# SCRIPT SUPPRESSION : #==========================================================================
if (Test-Path $mydata)
{
Write-host "Le répertoire scruté est :" $mydata -foregroundcolor "Red"
Write-Host "Il est encore temps d'annuler (vous avez 5 secondes), Pressez 'Ctrl + C' pour quitter" -foregroundcolor "Yellow"
Start-sleep -s 5
$jour = Get-Date
$lastmod = $jour.AddDays(-$day)
write-host $jour
write-host $lastmod
$Files = get-childitem $mydata -include *.* -recurse |Where {$_.LastWriteTime -le "$lastmod"}
foreach ($File in $Files)
{
write-host "Deleting File $File" -foregroundcolor "Red"; Remove-Item $File | out-null
}
}
Else
{
Write-Host "Le Repertoire $mydata n'existe pas !"
}
#==========================================================================
# SETTING 3 : Arrêt du log
#==========================================================================
Stop-Transcript
#==========================================================================
# SETTINGS ENVOI DU MAIL : Les répertoires à scanner.
#==========================================================================
$expediteur = "expediteur@mail.fr"
$destinataire = "destinataire@mail.fr"
$serveur = "serveursmtp.fr"
$fichier = $fichierlog
$objet = "suppression de fichiers " + [System.DateTime]::Now
$texte = "Vous trouverez en fichier joint le fichier de log spécifiant les objets supprimés par le script"
#==========================================================================
# SCRIPT ENVOI DU MAIL : Les répertoires à scanner.
#==========================================================================
$message = new-object System.Net.Mail.MailMessage $expediteur, $destinataire, $objet, $texte
$attachment = new-object System.Net.Mail.Attachment $fichier
$message.Attachments.Add($attachment)
$client = new-object System.Net.Mail.SmtpClient $serveur
$client.Credentials = [System.Net.CredentialCache]::DefaultNetworkCredentials
$client.Send($message) #==========================================================================
# FIN DU SCRIPT
#==========================================================================
|
****************************************************************************
****************************************************************************
Bonjour,
Je suis en train de réaliser un script PowerShell qui parcours une arborescence de fichier, et qui les supprime si la date de dernière modification est ultérieure à X jours.
Je souhaite également loguer une ligne par fichier supprimé.
Le truc c'est que je connais peu le langage powershell. Mais j'avais déjà adapté un script qui a la même fonction en VBS.
J'ai trouvé un document microsoft permettant de faire la transition VBS vers Powershell, mais c'est pas si évident que ça.
Voici en gros mon VBS :
If Wscript.Arguments.Count = 0 Then Quantity = 1
redim MyData(Quantity)
MyData(1) = "D:\rep1\rep2" 'repertoire à parcourir Else
redim MyData(1)
MyData(1) = Wscript.Arguments(0) 'was initiated by dropping folder on it
Quantity = 1
End If
'chemin fichier log
BackupLogFile = "D:\scripts\deletelog.txt"
'mail
blnLogMail=true
strMailFrom="xxx@xxx.fr"
strMailTo="yyyy@xxx.fr"
strMailSubject="[ serveur ] Delete Report"
strMailSubjectError="[ serveur ] Delete Report - ERROR"
strMailSMTPServer="123.123.123.1"
'script
set fso = CreateObject("Scripting.FileSystemObject" )
strScript = WScript.ScriptFullName
strScript = fso.GetFileName( strScript )
strScript = left( strScript, len(strScript) - 4 )
count = 0
dim arrResults ' vecteur qui stocke les resultats
redim arrResults(0)
For i = 1 to Quantity If MyData(i) <> "" then
if fso.DriveExists( MyData(i) ) Then
call Delete( MyData(i) )
elseif fso.folderExists(MyData(i)) then
call Delete( MyData(i) )
elseif fso.fileExists(MyData(i)) then call Filedelete( MyData(i) )
else strMsg = MyData(i) & vbcrlf & vbcrlf & "Le fichier ou chemin n'existe pas" & _
vbcrlf & "Vérifiez que vous avez correctement tapé le chemin"
strMailSubject=strMailSubjectError
SendMail(strMsg)
WScript.Quit
end if
End If
Next
strlog = "----------------------" & vbnewline & "suppression de" & now() & vbnewline
strlog = strlog & join(arrResults, vbnewline) & vbnewline & "= " & count & "fichiers supprimés" & BackupPath & vbnewline & vbnewline
call logresults ( strlog )
' ----- envoi du mail
SendMail(strlog)
' ----- Reset Objet
set fso = nothing
wscript.quit
'-------------------------------------------------------
'Performes the actual copying if required
Sub Delete( mypath )
Set fldr = fso.GetFolder( myPath )
For Each f in fldr.Files
DoEvents
if DateDiff("d",fso.GetFile(f).DateLastModified,date() ) > 30 then
count = count + 1
ReDim Preserve arrResults(count)
arrResults(count) = f
fso.DeleteFile f, true
end if
DoEvents
Next
For Each Folder In fldr.SubFolders
Call Delete(Folder)
Next
End Sub
'-----------------------------------------------------------------
'performs the actual copying of Files if the path was a file - not folder
Sub Filedelete( myFile )
set f = fso.GetFile( myFile )
if DateDiff("d",fso.GetFile(f).DateLastModified,date() ) > 30 then
count = count + 1
ReDim Preserve arrResults(count)
arrResults(count) = f
fso.DeleteFile f, true
end if End Sub
'----------------------------------------------------------------
'Fonction log
Sub LogResults( myText )
myfile = BackupLogFile
Set fso = CreateObject("Scripting.FileSystemObject" )
OutFile = "C:\#temp#.txt"
set textstream = fso.OpenTextFile(myFile,1,true)
Set OutStream=fso.CreateTextFile(OutFile,True)
OutStream.WriteLine( mytext )
Do until textstream.AtEndOfStream OneLine = textstream.ReadLine
OutStream.WriteLine(oneline)
if instr(Oneline, "----------" ) then logcount = logcount + 1
if logcount >= 5 then
exit do
end if
end if
Loop
textstream.close
OutStream.Close
fso.CopyFile OutFile, myfile, true
fso.DeleteFile OutFile
End Sub
'-------------------------------------------------------------------
Sub DoEvents
On error resume next
wscript.sleep 1 'milliseconds
End Sub
'-------------------------------------------------------------------
' Fonction mail
Sub SendMail(strMessage)
If blnLogMail Then
Set objMail= WScript.CreateObject("CDO.Message" )
With objMail
.From = strMailFrom
.To = strMailTo
.Subject = strMailSubject
.TextBody = CStr("" & strMessage)
.Configuration.Fields.Item ("http://schemas.microsoft.com/cdo/configuration/sendusing" ) = 2
.Configuration.Fields.Item("http://schemas.microsoft.com/cdo/configuration/smtpserver" ) = strMailSMTPServer
.Configuration.Fields.Item("http://schemas.microsoft.com/cdo/configuration/smtpserverport" ) = 25
.Configuration.Fields.Update
.Send
End With
SET objMail = Nothing
End If
End Sub
|
Comme je dis c'est un script qui à la base était utilisé pour copier des messages, je l'ai récupéré et adapté pour les supprimer.
Et voici ce que ça donne pour l'instant en Powershell :
$mydata = "C:\repertoire1\repertoire2"
# au cas ou l'on rajoute un répertoire :
#$mydata = $mydata + "C:\repertoire3"
$backuplogfile="C:\scripts\deletelog.log"
$logmail = true
$strMailFrom="deletefiles@chu-grenoble.fr"
$strMailTo="nlecertisseur@chu-grenoble.fr"
$strMailSubject="[ Serveur ] Rapport de suppresion"
$strMailSubjectError="[ Serveur ] Rapport de suppresion - ERREUR"
$strMailSMTPServer="@IP du SMTP a mettre"
# SCRIPT : #Creation de l'objet COM
$obj = new-object -comobject scripting.filesystemobject
#Galère
For ($i = 1;$i -le $mydata.length;$i++)
{
#Galère
|
Voila ou j'en suis .
J'essaie de traduire comme je peux, mais j'ai quelques soucis pour ceci déja :
strScript = WScript.ScriptFullName
strScript = fso.GetFileName( strScript )
strScript = left( strScript, len(strScript) - 4 )
|
J'arrive pas trop à piger a quoi ça sert...
Bref si vous avez des idées, l'aide est la bienvenue Message édité par nixnbk le 02-02-2009 à 15:57:02 ---------------
I'll feed your skin snacks to my cockatiel!
|