La navigation sur les lecteurs Windows PowerShell et la manipulation des éléments qui s'y trouvent sont semblables à la manipulation des fichiers et des dossiers sur les lecteurs de disques physiques de Windows. Nous verrons dans cette section comment traiter des tâches spécifiques de manipulation des fichiers et dossiers.

Listage de tous les fichiers et dossiers d'un dossier

Vous pouvez obtenir tous les éléments situés directement dans un dossier en utilisant Get-ChildItem. Ajoutez le paramètre Force optionnel pour afficher les éléments masqués ou système. Par exemple, cette commande affiche le contenu direct du lecteur Windows PowerShell C (qui correspond au lecteur C physique de Windows) :

Get-ChildItem -Force C:\

Cette commande répertorie uniquement les éléments contenus directement, de manière très similaire à l'utilisation de la commande DIR dans Cmd.exe ou de ls dans un interpréteur de commandes UNIX. Pour afficher les éléments contenus, vous devez aussi spécifier le paramètre -Recurse. (Cette opération peut prendre très longtemps.) Pour lister tout le contenu du lecteur C :

Get-ChildItem -Force C:\ -Recurse

Get-ChildItem peut filtrer des éléments avec ses paramètres Path, Filter, Include et Exclude, mais pas ceux reposant généralement uniquement sur le nom. Vous pouvez réaliser un filtrage complexe sur d'autres propriétés d'éléments à l'aide de Where-Object.

La commande suivante recherche tous les fichiers exécutables du dossier Program Files dont la dernière modification a été effectuée après le 1er octobre 2005 et dont la taille n'est ni inférieure à 1 mégaoctet, ni supérieure à 10 mégaoctets :

Get-ChildItem -Path $env:ProgramFiles -Recurse -Include *.exe | Where-Object -FilterScript {($_.LastWriteTime -gt "2005-10-01") -and ($_.Length -ge 1m) -and ($_.Length -le 10m)}

Copie de fichiers et de dossiers

La copie est réalisée par Copy-Item. La commande suivante sauvegarde C:\boot.ini en C:\boot.bak :

Copy-Item -Path c:\boot.ini -Destination c:\boot.bak

Si le fichier de destination existe déjà, la tentative de copie échoue. Pour remplacer une destination préexistante, utilisez le paramètre Force :

Copy-Item -Path c:\boot.ini -Destination c:\boot.bak -Force

Cette commande fonctionne même lorsque la destination est en lecture seule.

La copie de dossiers fonctionne de la même manière. Cette commande copie le dossier C:\temp\test1 dans le nouveau dossier c:\temp\DeleteMe de manière récursive :

Copy-Item C:\temp\test1 -Recurse c:\temp\DeleteMe

Vous pouvez également copier une sélection d'éléments. La commande suivante copie dans c:\temp\text tous les fichiers .txt contenus n'importe où dans c:\data :

Copy-Item -Filter *.txt -Path c:\data -Recurse -Destination c:\temp\text

Vous pouvez toujours utiliser d'autres outils pour exécuter des copies de système de fichiers. Les objets XCOPY, ROBOCOPY et COM, tels que Scripting.FileSystemObject,, fonctionnent tous dans Windows PowerShell. Par exemple, vous pouvez utiliser la classe de l'objet Windows Script Host Scripting.FileSystem COM pour sauvegarder C:\boot.ini dans C:\boot.bak :

(New-Object -ComObject Scripting.FileSystemObject).CopyFile("c:\boot.ini", "c:\boot.bak")

Création de fichiers et de dossiers

La création d'éléments fonctionne de la même manière sur tous les fournisseurs de Windows PowerShell. Si un fournisseur de Windows PowerShell a plusieurs types d'éléments (par exemple, le fournisseur FileSystem de Windows PowerShell fait la distinction entre répertoires et fichiers), vous devez spécifier le type d'élément.

Cette commande crée le dossier C:\temp\New Folder :

New-Item -Path 'C:\temp\New Folder' -ItemType "directory"

Cette commande crée le fichier vide C:\temp\New Folder\file.txt :

New-Item -Path 'C:\temp\New Folder\file.txt' -ItemType "file"

Suppression de tous les fichiers et dossiers d'un dossier

Vous pouvez supprimer des éléments contenus à l'aide de Remove-Item, mais vous serez invité à confirmer la suppression si un élément en contient d'autres. Par exemple, si vous essayez de supprimer le dossier C:\temp\DeleteMe qui contient d'autres éléments, Windows PowerShell vous demande une confirmation avant de supprimer le dossier :

Remove-Item C:\temp\DeleteMe

Confirm
The item at C:\temp\DeleteMe has children and the -recurse parameter was not
specified. If you continue, all children will be removed with the item. Are you
sure you want to continue?
[Y] Yes  [A] Yes to All  [N] No  [L] No to All  [S] Suspend  [?] Help
(default is "Y"):

Si vous ne souhaitez pas qu'une confirmation vous soit demandée pour chaque élément contenu, spécifiez le paramètre Recurse :

Remove-Item C:\temp\DeleteMe -Recurse

Mappage d'un dossier local en tant que lecteur accessible par Windows

Vous pouvez également mapper un dossier local à l'aide de la commande subst. La commande suivante crée un lecteur local P: ayant pour racine le répertoire Program Files local :

subst p: $env:programfiles

Comme avec les lecteurs réseau, les lecteurs mappés dans Windows PowerShell à l'aide de subst sont immédiatement visibles par l'interpréteur de commandes Windows PowerShell.

Lecture d'un fichier texte en tant que tableau

Les données textuelles sont souvent stockées dans un fichier dont chacune des lignes est traitée comme des éléments de données distincts. L'applet de commande Get-Content peut être utilisée pour lire un fichier entier en une étape, comme indiqué ici :

PS> Get-Content -Path C:\boot.ini
[boot loader]
timeout=5
default=multi(0)disk(0)rdisk(0)partition(1)\WINDOWS
[operating systems]
multi(0)disk(0)rdisk(0)partition(1)\WINDOWS="Microsoft Windows XP Professional"
 /noexecute=AlwaysOff /fastdetect
multi(0)disk(0)rdisk(0)partition(1)\WINDOWS=" Microsoft Windows XP Professional 
with Data Execution Prevention" /noexecute=optin /fastdetect

Get-Content traite déjà les données lues du fichier comme un tableau, avec un élément par ligne de contenu du fichier. Vous pouvez le constater en vérifiant la longueur (Length) du contenu retourné :

PS> (Get-Content -Path C:\boot.ini).Length
6

Cette commande est très utile pour obtenir des listes d'informations directement dans Windows PowerShell. Par exemple, vous pouvez stocker une liste de noms d'ordinateurs ou d'adresses IP dans un fichier C:\temp\domainMembers.txt, avec un nom sur chaque ligne du fichier. Vous pouvez utiliser Get-Content pour récupérer le contenu du fichier et le stocker dans la variable $Computers :

$Computers = Get-Content -Path C:\temp\DomainMembers.txt

$Computers est maintenant un tableau qui contient un nom d'ordinateur dans chaque élément.




Table des matières