Un élément que vous voyez sur les lecteurs Windows PowerShell, tels que les fichiers et dossiers des lecteurs de système de fichiers et les clés de Registre des lecteurs de Registre Windows PowerShell, est appelé « Item » (élément) dans Windows PowerShell. Le nom des applets de commande qui utilisent ces éléments comprend le substantif Item.
La sortie de la commande Get-Command -Noun Item montre qu'il existe neuf applets de commande Item Windows PowerShell.
PS> 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éation d'éléments (New-Item)
Pour créer un élément dans le système de fichiers, utilisez l'applet de commande New-Item. Incluez le paramètre Path avec le chemin d'accès à l'élément et le paramètre ItemType avec la valeur « file » (fichier) ou « directory » (répertoire).
Par exemple, pour créer un répertoire nommé « New.Directory » dans le répertoire C:\Temp, tapez :
PS> New-Item -Path c:\temp\New.Directory -ItemType Directory Directory: Microsoft.Windows PowerShell.Core\FileSystem::C:\temp Mode LastWriteTime Length Name ---- ------------- ------ ---- d---- 2006-05-18 11:29 AM New.Directory
Pour créer un fichier, remplacez la valeur du paramètre ItemType par « file ». Par exemple, pour créer un fichier nommé « file1.txt » dans le répertoire New.Directory, tapez :
PS> New-Item -Path C:\temp\New.Directory\file1.txt -ItemType file Directory: Microsoft.Windows 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 du 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 :
PS> New-Item -Path HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\_Test Hive: Microsoft.PowerShell.Core\Registry::HKEY_LOCAL_MACHINE\SOFTWARE\Micros oft\Windows\CurrentVersion SKC VC Name Property --- -- ---- -------- 0 0 _Test {}
Lorsque vous tapez un chemin d'accès de Registre, veillez à inclure les deux-points (:) dans le nom des lecteurs Windows PowerShell, HKLM: et HKCU:. Sans les deux-points, Windows PowerShell ne reconnaît pas le nom de lecteur dans le chemin d'accès.
Pourquoi les valeurs du Registre ne sont pas des éléments
Lorsque vous utilisez l'applet de commande Get-ChildItem pour rechercher les éléments d'une clé de Registre, vous ne verrez jamais les véritables entrées du Registre ou leur valeur.
Par exemple, la clé de Registre HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\Run contient habituellement plusieurs entrées de Registre qui représentent les applications qui s'exécutent lorsque le système démarre.
Toutefois, lorsque vous utilisez Get-ChildItem pour rechercher des éléments enfants de la clé, vous ne verrez que la sous-clé OptionalComponents de la clé :
PS> Get-ChildItem HKLM:\Software\Microsoft\Windows\CurrentVersion\Run Hive: Microsoft.PowerShell.Core\Registry::HKEY_LOCAL_MACHINE\Software\Micros oft\Windows\CurrentVersion\Run SKC VC Name Property --- -- ---- -------- 3 0 OptionalComponents {}
Il serait pratique de traiter les entrées du Registre comme des éléments, mais vous ne pouvez pas spécifier de chemin d'accès à une entrée du Registre d'une manière propre à garantir son caractère unique. 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)) de la sous-clé Run. En outre, parce que les noms d'entrées de Registre peuvent contenir la barre oblique inverse (\), si les entrées de Registre étaient des éléments, vous ne pourriez pas utiliser la notation de chemin d'accès pour distinguer une entrée de Registre nommée Windows\CurrentVersion\Run de la sous-clé située dans ce chemin d'accès.
Affectation d'un nouveau nom à des éléments existants (Rename-Item)
Pour renommer un fichier ou un dossier, utilisez l'applet de commande Rename-Item. La commande suivante modifie le nom du fichier file1.txt en fileOne.txt.
PS> Rename-Item -Path C:\temp\New.Directory\file1.txt fileOne.txt
L'applet de commande Rename-Item peut renommer un fichier ou un dossier, mais ne peut pas déplacer un élément. La commande suivante échoue, car elle essaie de déplacer le fichier du répertoire New.Directory vers le répertoire Temp.
PS> Rename-Item -Path C:\temp\New.Directory\fileOne.txt c:\temp\fileOne.txt Rename-Item : Cannot rename because the target specified is not a path. At line:1 char:12 + Rename-Item <<<< -Path C:\temp\New.Directory\fileOne c:\temp\fileOne.txt
Déplacement d'éléments (Move-Item)
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é, incluez le paramètre PassThru de l'applet de commande Move-Item. Sans Passthru, l'applet de commande Move-Item n'affiche aucun résultat.
PS> Move-Item -Path C:\temp\New.Directory -Destination C:\ -PassThru Directory: Microsoft.Windows PowerShell.Core\FileSystem::C:\ Mode LastWriteTime Length Name ---- ------------- ------ ---- d---- 2006-05-18 12:14 PM New.Directory
Copie d'éléments (Copy-Item)
Si vous connaissez les opérations de copie dans d'autres interpréteurs de commandes, vous pouvez trouver le comportement de l'applet de commande Copy-Item de Windows PowerShell inhabituel. Lorsque vous copiez un élément d'un emplacement vers un autre, Copy-Item ne copie pas son contenu par défaut.
Par exemple, si vous copiez le répertoire New.Directory du lecteur C: dans le répertoire C:\temp, la commande réussit, mais les fichiers de New.Directory ne sont pas copiés.
PS> Copy-Item -Path C:\New.Directory -Destination C:\temp
Si vous affichez le contenu de C:\temp\New.Directory, vous constaterez qu'il ne contient pas de fichiers :
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 a été conçue pour être générique ; elle ne sert pas uniquement à copier des fichiers et des dossiers. En outre, même lorsque vous copiez des fichiers et des dossiers, vous pouvez souhaiter ne copier que le conteneur et non les éléments qui s'y trouvent.
Pour copier tout le contenu d'un dossier, incluez 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 qui vous permet de remplacer le dossier vide.
PS> Copy-Item -Path C:\New.Directory -Destination C:\temp -Recurse -Force -Passthru Directory: Microsoft.Windows PowerShell.Core\FileSystem::C:\temp Mode LastWriteTime Length Name ---- ------------- ------ ---- d---- 2006-05-18 1:53 PM New.Directory Directory: Microsoft.Windows PowerShell.Core\FileSystem::C:\temp\New.Directory Mode LastWriteTime Length Name ---- ------------- ------ ---- -a--- 2006-05-18 11:44 AM 0 file1
Suppression d'éléments (Remove-Item)
Pour supprimer des fichiers et des dossiers, utilisez l'applet de commande Remove-Item. Certaines applets de commande Windows PowerShell, telles que Remove-Item, qui peuvent apporter des modifications importantes et irréversibles, vous demandent une confirmation lorsque vous entrez leurs commandes. Par exemple, si vous essayez de supprimer le dossier New.Directory, vous serez invité à confirmer la commande, car le dossier contient des fichiers :
PS> Remove-Item C:\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"):
Oui é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 confirmer, utilisez le paramètre -Recurse.
PS> Remove-Item C:\temp\New.Directory -Recurse
Exécution d'éléments (Invoke-Item)
Windows PowerShell utilise l'applet de commande Invoke-Item pour exécuter une action par défaut pour un fichier ou un dossier. Cette action par défaut est déterminée par le gestionnaire d'application par défaut du Registre ; l'effet est le même que si vous double-cliquez sur l'élément dans l'Explorateur Windows.
Par exemple, supposez que vous exécutez la commande suivante :
PS> Invoke-Item C:\WINDOWS
Une fenêtre de l'Explorateur ouverte sur C:\Windows s'affiche, exactement comme si vous aviez double-cliqué sur le dossier C:\Windows.
Si vous appelez le fichier Boot.ini sur un système antérieur à Windows Vista :
PS> 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.