Dans cet article nous allons voir quelques commandes PowerShell liées à la gestion des fichiers, des dossiers et des droits(ACL).
La première commande que nous allons voire est : Get-ChildItem . Elle permet de rechercher des fichiers et/ou des dossiers. Elle se différencie de la commande Get-Item qui récupère les informations sur un objet. Get-ChildItem comme son nom l'indique recherche les objets enfants.
Par exemple, la première commande ci-dessous cherche les objets contenus dans le dossier « d:\test\ » et renvoi les sous dossiers « dossier1, dossier2, dossier3 » et le fichier « fichier1.txt ».
Get-ChildItem d:\test
L'option « -recurse » permet de parcourir les sous-dossiers.
Get-ChildItem d:\test -Recurse
-
L'option « -file » ou « -directory » permet de n'afficher que les fichiers ou que les dossiers.
Get-Childitem d:\test -Recurse -File
Il est possible d'afficher d'autres propriétés que ceux présentés par défaut comme par exemple la date de création, de modification, du dernier accès. Pour cela il suffit d'ajouter à la commande initiale : « | select propriété1,propriété2,… ». Comme par exemple :
« | select name,CreationTime,LastWriteTime,LastAccessTime
Si vous utilisez la commande « Get-Member » après le Get-ChildItem dans un |, vous pouvez lister les propriétés. La propriété « Fullname » par exemple, indique le chemin complet d'accès au fichier ainsi que son nom.
Dans l'exemple suivant, nous affichons le nom du fichier, le dossier parent, sa taille et l'extension de fichier.
Get-Childitem D:\test -Recurse -File | select name,Directory,Length,Extension
Il est également facile de sélectionner les fichiers antérieurs à une date en utilisant « Where ». La commande ci-dessous donne un exemple avec la date de création, mais il est possible d'utiliser la dernière modification ou le dernier accès.
where { $_.CreationTime -lt (get-Date).AddDays(-10)}
La commande « (Get-Date).AddHours(-10) », prends la date et heure actuelle et revient de 10 heures en arrières. Le résultat listera les fichiers créé 10 heures avant l'heure actuelle. L'option –gt aurait permis d'afficher les fichiers créés dans les 10 dernières heures.
La fonction Get-Date renvoie la date et heure actuelle. Il est possible d'ajouter ou de soustraire du temps : (Get-Date).AddHours(2) : ajoute 2 heures (Get-Date).AddHours(-10) : enlève 10 heures (Get-date).AddDays(8) : ajoute 8 jours (Get-date).AddMonths(-1) : enlève 1 mois
|
|
Quelques opérateurs de comparaison : -eq égal -ne différent -ge plus grand que ou égal -le plus petit que ou égal -gt plus grand que -lt plus petit que |
Il est possible de cumuler les « | », et donc de sélectionner des propriétés spécifiques pour les fichiers qui ont été créés il y a plus d'une heure.
L'image ci-dessous montre un exemple, pour sélectionner les fichiers crées il y a plus d'une heure et sélectionne des propriétés spécifiques.
A l'aide de « | », il est simple de supprimer l'ensemble des fichiers créer il y a plus d'une heure dans un dossier et les sous-dossiers. Pour cela il suffit d'ajouter « Remove-Item ».
La commande Remove-Item supprime les fichiers ou les dossiers sans utiliser la corbeille. |
Get-Childitem d:\test -Recurse -File | where { $_.LastWriteTime -lt (get-Date).Adddays(-10)} |Remove-Item
Vous savez maintenant comment purger des fichiers anciens dans un dossier spécifique, comme par exemple des journaux de IIS, en une seule ligne de commande PowerShell.
Il y a d'autres commandes permettant de manipuler des dossiers ou des fichiers. Vous pouvez les retrouver avec la commande « Get-Command *Item* »
Par exemple, la commande « copy-item » permet de copier un objet. Il suffit de mettre le chemin de l'objet et d'indiquer la destination de la copie.
copy-item D:\test\Dossier1\Fichier6.txt -Destination D:\test\Dossier2\Fichier7.txt
Enfin la commande suivante permet de modifier certains fichiers comme par exemple la date de création du fichier :
Get-ChildItem D:\test\Dossier2\Fichier7.txt | % {$_.CreationTime = '04/06/2018 06:00:36 '}
Enfin, la commande « Get-ChildItem » peut être utilisée avec d'autres types d'objets que les fichiers ou dossier.
get-childitem -path WSMan:\localhost\client\TrustedHosts
Vous pouvez également interroger le registre de Windows, par exemple avec la liste des programmes inscrits dans « uninstall ».
Get-ChildItem -Path HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall
Dans la suite nous verons comment modifier les permissions sur les dossiers et les fichiers…