Manipulation d’éléments de manière directe
Les éléments que vous voyez dans les lecteurs PowerShell, tels que les fichiers et dossiers ou les clés de registre, sont appelés Éléments (Items) dans PowerShell. Les applets de commande associées à ces éléments comportent le nom Item dans leur intitulé.
La sortie de la commande Get-Command -Noun Item
montre qu’il y a neuf applets de commande pour les éléments PowerShell.
Get-Command -Noun Item
CommandType Name Definition
----------- ---- ----------
Cmdlet Clear-Item Clear-Item [-Path] <String[]...
Cmdlet Copy-Item Copy-Item [-Path] <String[]>...
Cmdlet Get-Item Get-Item [-Path] <String[]> ...
Cmdlet Invoke-Item Invoke-Item [-Path] <String[...
Cmdlet Move-Item Move-Item [-Path] <String[]>...
Cmdlet New-Item New-Item [-Path] <String[]> ...
Cmdlet Remove-Item Remove-Item [-Path] <String[...
Cmdlet Rename-Item Rename-Item [-Path] <String>...
Cmdlet Set-Item Set-Item [-Path] <String[]> ...
Créer des éléments
Pour créer un élément dans le système de fichiers, utilisez l’applet de commande New-Item
. Indiquez le chemin de l’élément dans le paramètre Path, et la valeur file
ou directory
dans le paramètre ItemType.
Par exemple, pour créer un répertoire nommé New.Directory
dans le répertoire C:\Temp
, tapez :
New-Item -Path c:\temp\New.Directory -ItemType Directory
Directory: Microsoft.PowerShell.Core\FileSystem::C:\temp
Mode LastWriteTime Length Name
---- ------------- ------ ----
d---- 2006-05-18 11:29 AM New.Directory
Pour créer un fichier, définissez la valeur du paramètre ItemType sur file
. Par exemple, pour créer un fichier nommé file1.txt
dans le répertoire New.Directory
, tapez :
New-Item -Path C:\temp\New.Directory\file1.txt -ItemType file
Directory: Microsoft.PowerShell.Core\FileSystem::C:\temp\New.Directory
Mode LastWriteTime Length Name
---- ------------- ------ ----
-a--- 2006-05-18 11:44 AM 0 file1
Vous pouvez utiliser la même technique pour créer une clé de Registre. En fait, une clé de Registre est plus facile à créer, car le seul type d'élément dans le Registre Windows est une clé. (Les entrées de Registre sont des propriétés d’élément.) Par exemple, pour créer une clé nommée _Test
dans la sous-clé CurrentVersion
, tapez :
New-Item -Path HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\_Test
Hive: Microsoft.PowerShell.Core\Registry::HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion
SKC VC Name Property
--- -- ---- --------
0 0 _Test {}
Quand vous tapez un chemin de Registre, veillez à ajouter le signe deux-points (:
) dans les noms de lecteur PowerShell HKLM:
et HKCU:
. Sans les deux-points, PowerShell ne reconnaît pas le nom du lecteur dans le chemin.
Pourquoi les valeurs de Registre ne sont pas des éléments
Quand vous utilisez l’applet de commande Get-ChildItem
pour rechercher les éléments dans une clé de Registre, ni les entrées de Registre ni leurs valeurs n’apparaissent.
Par exemple, la clé de Registre HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\Run
contient généralement plusieurs entrées de Registre qui représentent des applications s’exécutant au démarrage du système.
Toutefois, quand vous utilisez Get-ChildItem
pour rechercher les éléments enfants dans la clé, tout ce que vous voyez est la sous-clé OptionalComponents
de la clé :
Get-ChildItem HKLM:\Software\Microsoft\Windows\CurrentVersion\Run
Hive: Microsoft.PowerShell.Core\Registry::HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\Run
SKC VC Name Property
--- -- ---- --------
3 0 OptionalComponents {}
Bien qu’il serait pratique de traiter les entrées de Registre en tant qu’éléments, vous ne pouvez pas spécifier un chemin d’accès à une entrée de Registre d’une façon qui garantit son unicité. La notation de chemin d’accès ne fait pas la distinction entre la sous-clé de Registre nommée Run et l’entrée de Registre (Default) dans la sous-clé Run.
Par ailleurs, comme les noms des entrées de Registre peuvent contenir une barre oblique inverse (\
), si les entrées de Registre sont des éléments, vous ne pouvez pas utiliser la notation de chemin pour faire la distinction entre une entrée de Registre nommée Windows\CurrentVersion\Run
et la sous-clé située dans ce chemin.
Attribution d’un nouveau nom aux éléments existants
Pour changer le nom d’un fichier ou d’un dossier, utilisez l’applet de commande Rename-Item
. La commande suivante remplace le nom du fichier file1.txt
par fileOne.txt
.
Rename-Item -Path C:\temp\New.Directory\file1.txt fileOne.txt
L’applet de commande Rename-Item
peut changer le nom d’un fichier ou d’un dossier, mais ne peut pas déplacer un élément. La commande suivante échoue, car elle tente de déplacer le fichier du répertoire New.Directory
vers le répertoire Temp.
Rename-Item -Path C:\temp\New.Directory\fileOne.txt c:\temp\fileOne.txt
Rename-Item : can't rename because the target specified isn't a path.
At line:1 char:12
+ Rename-Item <<<< -Path C:\temp\New.Directory\fileOne c:\temp\fileOne.txt
Déplacement d’éléments
Pour déplacer un fichier ou un dossier, utilisez l’applet de commande Move-Item
.
Par exemple, la commande suivante déplace le répertoire New.Directory du répertoire C:\temp
vers la racine du lecteur C:
. Pour vérifier que l’élément a été déplacé, ajoutez le paramètre PassThru de l’applet de commande Move-Item
. Sans PassThru, l’applet de commande Move-Item
n’affiche aucun résultat.
Move-Item -Path C:\temp\New.Directory -Destination C:\ -PassThru
Directory: Microsoft.PowerShell.Core\FileSystem::C:\
Mode LastWriteTime Length Name
---- ------------- ------ ----
d---- 2006-05-18 12:14 PM New.Directory
Copie d’éléments
Si vous avez déjà effectué des opérations de copie dans d’autres interpréteurs de commandes, le comportement de l’applet de commande Copy-Item
dans PowerShell peut vous sembler inhabituel. Quand vous copiez un élément d’un emplacement vers un autre, par défaut, Copy-Item
ne copie pas son contenu.
Par exemple, si vous copiez le répertoire New.Directory
du lecteur C: vers le répertoire C:\temp
, la commande aboutit, mais les fichiers du répertoire New.Directory ne sont pas copiés.
Copy-Item -Path C:\New.Directory -Destination C:\temp
Si vous affichez le contenu C:\temp\New.Directory
, vous voyez qu’il ne contient aucun fichier :
PS> Get-ChildItem -Path C:\temp\New.Directory
PS>
Pourquoi l’applet de commande Copy-Item
ne copie-t-elle pas le contenu vers le nouvel emplacement ?
L’applet de commande Copy-Item
est une commande générique, elle ne sert pas simplement à copier des fichiers et des dossiers.
En outre, même si vous copiez des fichiers et des dossiers, vous pouvez être amené à copier uniquement le conteneur et non les éléments qu'il contient.
Pour copier tout le contenu d’un dossier, ajoutez le paramètre Recurse de l’applet de commande Copy-Item
dans la commande. Si vous avez déjà copié le répertoire sans son contenu, ajoutez le paramètre Force pour remplacer le dossier vide.
Copy-Item -Path C:\New.Directory -Destination C:\temp -Recurse -Force -PassThru
Directory: Microsoft.PowerShell.Core\FileSystem::C:\temp
Mode LastWriteTime Length Name
---- ------------- ------ ----
d---- 2006-05-18 1:53 PM New.Directory
Directory: Microsoft.PowerShell.Core\FileSystem::C:\temp\New.Directory
Mode LastWriteTime Length Name
---- ------------- ------ ----
-a--- 2006-05-18 11:44 AM 0 file1
Suppression d’éléments
Pour supprimer des fichiers et des dossiers, utilisez l’applet de commande Remove-Item
. Les applets de commande PowerShell comme Remove-Item
, qui effectuent des changements importants et irréversibles, demandent souvent une confirmation quand vous entrez la commande. Par exemple, si vous essayez de supprimer le dossier New.Directory
qui contient des fichiers, vous êtes invité à confirmer la commande :
Remove-Item C:\temp\New.Directory
Confirm
The item at C:\temp\New.Directory 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"):
Yes
étant la réponse par défaut, pour supprimer le dossier et ses fichiers, appuyez sur la touche Entrée. Pour supprimer le dossier sans confirmation, utilisez le paramètre Recurse.
Remove-Item C:\temp\New.Directory -Recurse
Exécution d’éléments
PowerShell utilise l’applet de commande Invoke-Item
afin d’effectuer une action par défaut sur un fichier ou un dossier. Cette action par défaut est déterminée par le gestionnaire d'application par défaut dans le Registre. Vous obtenez le même résultat qu'en double-cliquant sur l'élément dans l'Explorateur de fichiers.
Par exemple, imaginez que vous exécutiez la commande suivante :
Invoke-Item C:\WINDOWS
Une fenêtre d’explorateur située dans C:\Windows
s’affiche de la même façon que si vous double-cliquez sur le dossier C:\Windows
.
Si vous appelez le fichier Boot.ini
sur un système antérieur à Windows Vista :
Invoke-Item C:\boot.ini
Si le type de fichier .ini
est associé au Bloc-notes, le fichier boot.ini
s’ouvre dans le Bloc-notes.