Se connecter

Informatique

Programmation

Sujet : Script Batch vers Powershell
1
alexdu67000
Niveau 1
15 juillet 2019 à 10:52:02

Bonjour,

Suite à de nombreuses recherches, je ne sais pas comment convertir ce script batch (script de nettoyage) en script powershell.

Merci d'avance pour l'aide que vous pourrez m'apporter.

@echo off
rem nettoyage rep users

PUSHD C:\Users\Public\Documents\
DEL /Q "*.*"
FOR /F "tokens=*" %%a in ('DIR /AD /B') do RD /S /Q "%%a"

PUSHD C:\Users\Public\Pictures\
DEL /Q "*.*"
FOR /F "tokens=*" %%a in ('DIR /AD /B') do RD /S /Q "%%a"

rem nettoyage temp
del /s /q %temp%\*.*

Marienblurp
Niveau 6
16 juillet 2019 à 21:33:17

Salut,

Si tu souhaites supprimer l'intégralité du contenu d'un répertoire via powershell tu peux utiliser ça :

$path = "chemin de ton dossier"
Set-Location $path
Get-ChildItem *.* -Recurse | Remove-Item

Si tu veux exclure certains types de fichiers ou de dossier tu peux utiliser -Exclude "cequetuveux" sur ton get-childitem.

Je t'invite à consulter le technet de la cmdlet ici pour en savoir plus et affiner ta commande : https://docs.microsoft.com/en-us/powershell/module/microsoft.powershell.management/get-childitem?view=powershell-6

Marienblurp
Niveau 6
16 juillet 2019 à 21:35:33

Je viens de te relire et de voir que tu incluais les fichiers cachés.

Du coup tu peux utiliser -force pour inclure l'intégralité des fichiers :
Get-ChildItem *.* -Recurse -Force | Remove-Item

alexdu67000
Niveau 1
17 juillet 2019 à 11:44:37

Merci beaucoup ! Ce pendant je n'arrive pas à supprimer les dossier; comment dois-je faire ?

Marienblurp
Niveau 6
17 juillet 2019 à 12:24:34

Utilise ça :

$path = "chemin de ton dossier"
Set-Location $path
Get-ChildItem * -Recurse -Force | Remove-Item -Recurse

Ma première commande n'incluait que le Items sous la forme *.* (donc les fichiers), la il va plus se poser de question et tout shooter.

alexdu67000
Niveau 1
19 juillet 2019 à 11:50:47

Merci pour l'aide ! Je met à disposition mon script :

  1. Poste élève

Set-Location "C:\Users\posteeleve\"
Get-ChildItem -Recurse -Force -Include "*.*" -Exclude "*.lnk" | Remove-Item

$Dossier = Get-ChildItem -Name -Exclude "*.*"
$i = 0

for ($i ; $i -lt $Dossier.count ; $i++){
$Emplacement = "C:\Users\posteeleve\" + $Dossier[$i]
Set-Location $Emplacement
Get-ChildItem -Recurse -Force -Exclude "*.lnk" | Remove-Item
}

  1. Public

Set-Location "C:\Users\Public\"
Get-ChildItem -Recurse -Force -Include "*.*" -Exclude "*.lnk" | Remove-Item

$Dossier = Get-ChildItem -Name -Exclude "*.*"
$i = 0

for ($i ; $i -lt $Dossier.count ; $i++){
$Emplacement = "C:\Users\Public\" + $Dossier[$i]
Set-Location $Emplacement
Get-ChildItem -Recurse -Force -Exclude "*.lnk" | Remove-Item
}

Marienblurp
Niveau 6
19 juillet 2019 à 21:54:17

Joli petit script, compteurs, exclusion des .lnk, c'est propre !

Ravi d'avoir pu t'aider !

Si tu as envie d'aller plus loin (et être un gros flemmard comme moi) tu peux générer un envoi de mail avec le contenu de tes variables de sorties en utilisant :

Send-MailMessage -From 'Cequetuveux@tondomaine' -To 'tonadressemail', -Subject 'Ton objet de mail' -Body "Le corps de ton mail" -SmtpServer 'Ton Server SMTP'

Pour le corps de ton mail je t'invite à le travailler en amont dans une variable, sachant que tu peux inclure du html dans powershell.

Il ne te manquera plus qu'a créer un tâche planifiée sur ton poste/server/ordonnanceur avec ton script et c'est parti pour ne plus rien faire ;)

Amuse toi bien, n'oublie jamais que c'est comme ça que l'on progresse, reste curieux !

1
Sujet : Script Batch vers Powershell
   Retour haut de page
Consulter la version web de cette page