Comment créer un dossier ou plusieurs dossiers avec PowerShell ?
Sommaire
I. Présentation
Dans ce chapitre, nous allons apprendre à créer un dossier avec PowerShell en utilisant la commande "New-Item" ! Il s'agit de la commande native en PowerShell pour vous faire oublier la commande MS-DOS "mkdir" !
II. Créer un dossier avec PowerShell
La commande "New-Item", qui sert aussi à créer d'autres éléments tels que des fichiers, sera notre alliée pour créer un ou plusieurs dossiers. Commençons par la base : créer un dossier, en précisant son chemin de destination. Ni plus ni moins.
Voici la commande à exécuter pour créer le dossier "PowerShell" sous "C:TEMP" :
New-Item -Path "C:\TEMP\" -Name "PowerShell" -ItemType Directory
Quelques explications s'imposent :
- -Path : chemin de destination, c'est-à-dire l'emplacement où l'on doit créer le dossier
- -Name : le nom du dossier
- -ItemType : le type d'élément, c'est très important de préciser "Directory" car sinon c'est un fichier sans extension qui sera créé !
Avec cette syntaxe, nous distinguons bien le chemin d'un côté et le nom du dossier d'autre part.
Toutefois, nous pouvons faire plus court en intégrant le nom du dossier directement dans le chemin. Personnellement, je vous recommande plutôt d'utiliser le modèle ci-dessus.
New-Item -Path "C:\TEMP\PowerShell" -ItemType Directory
Si vous souhaitez créer un dossier dans l'emplacement courant, il n'est pas utile de saisir le chemin du répertoire actuel. En fait, il suffit d'utiliser cette syntaxe :
New-Item -Name "PowerShell" -ItemType Directory
Si nous ne précisons pas de valeur pour le paramètre "-Path", le répertoire actuel (vis-à-vis du prompt PowerShell) sera utilisé.
D'autres syntaxes possibles :
New-Item -Path . -Name "PowerShell" -ItemType Directory New-Item -Path ".\PowerShell" -ItemType Directory
Voilà, vous êtes désormais capable de créer un dossier avec PowerShell !
III. Créer plusieurs dossiers avec PowerShell
Parfois, nous avons besoin de créer plusieurs dossiers, voire même une arborescence de dossiers avec un dossier parent et des sous-dossiers. Nous pourrions enchaîner plusieurs commandes New-Item (une par dossier) pour atteindre notre objectif, mais nous allons voir que nous pouvons faire plus simple pour optimiser notre code !
A. Créer plusieurs dossiers au même endroit avec PowerShell
Plutôt que de saisir plusieurs fois la commande New-Item, nous pouvons spécifier tous les chemins et noms des répertoires à créer au niveau du paramètre "-Path". Pour créer les répertoires "PowerShell1", "PowerShell2" et "PowerShell3" à la racine de "C:\TEMP", cela donne :
New-Item -Path "C:\TEMP\PowerShell1","C:\TEMP\PowerShell2","C:\TEMP\PowerShell3" -Itemtype Directory
Bien sûr, nous pourrions créer trois dossiers dans des emplacements différents...
Prenons un autre exemple : créer une liste de dossiers en s'appuyant sur les données d'un fichier CSV. Ici, un fichier CSV avec un seul en-tête nommé "Username". L'objectif est simple : créer un dossier par utilisateur, en prenant la valeur de "Username" comme nom de dossier, au sein de "C:\TEMP\PowerShell".
Voici le contenu du fichier "Username.csv" :
Username
Florian
Théo
Adrien
Bobby
Nous commençons par importer le fichier CSV :
$Username = Import-CSV -Path "C:\TEMP\Username.csv"
Puis, on boucle sur le contenu du fichier CSV avec "ForEach" de façon à créer un répertoire par nom d'utilisateur. Chaque ligne du fichier CSV sera traitée grâce à la lecture de la variable "$Username".
$Username | foreach { New-Item -Path "C:\TEMP\PowerShell\" -Name $_.UserName -ItemType Directory }
Ce qui donne bien le résultat attendu :
Nous pourrions faire plus court au niveau de la syntaxe, en évitant de passer par une variable intermédiaire :
Import-CSV -Path "C:\TEMP\Username.csv" | foreach { New-Item -Path "C:\TEMP\PowerShell\" -Name $_.UserName -ItemType Directory }
Vous êtes capable de créer plusieurs dossiers avec PowerShell !
B. Créer une arborescence de dossiers avec PowerShell
Parfois, nous avons besoin de créer un dossier racine et des sous-dossiers : comment faire avec PowerShell ? C'est ce que nous allons aborder dans cette partie de ce chapitre.
Tout d'abord, il faut savoir que par défaut la commande New-Item permet de créer le chemin complet. Cela signifie que si nous voulons créer le dossier "Scripts" dans "C:\TEMP\PowerShell", mais que le répertoire "PowerShell" n'existe pas, il sera créé automatiquement ! Ainsi, nous allons créer une arborescence sans le vouloir.
New-Item -Path "C:\TEMP\PowerShell\Scripts" -ItemType Directory
L'exemple ci-dessous va permettre de créer les dossiers "Documents", "Téléchargements" et "Privé" dans le dossier racine de chaque utilisateur (à partir de la liste de noms du fichier CSV).
$Dossiers = ( "Documents", "Téléchargements", "Privé" ) Import-CSV -Path "C:\TEMP\Username.csv" | foreach { $Chemin = "C:\TEMP\PowerShell\$($_.UserName)" $Dossiers | Foreach { New-Item -Path $Chemin -Name $_ -ItemType Directory } }
Nous pouvons voir que les trois dossiers sont bien créés à chaque fois :
Terminons par une astuce basée sur l'utilisation de l'astérisque "*" ! Partons du principe que nous disposons d'une liste de répertoire créée suite à la lecture du fichier CSV (exemple précédent) :
Si nous souhaitons créer un sous-dossier "Documents" dans l'ensemble des dossiers contenus à la racine de "C:\TEMP\PowerShell", comment faire ? Nous pourrions obtenir la liste des dossiers avec "Get-ChildItem" et exécuter la commande New-Item à chaque fois pour créer le dossier manquant... Mais, nous pouvons faire beaucoup plus simple :
New-Item -Path "C:\TEMP\PowerShell\*" -Name "Documents" -ItemType Directory
Ce qui donne bien le résultat attendu :
Le fait de positionner l'astérisque à cet endroit va permettre de créer le dossier "Documents" dans tous les sous-répertoires ! À connaître, mais à utiliser avec précaution...
IV. Conclusion
Vous êtes désormais capable de créer un ou plusieurs dossiers avec PowerShell, que ce soit à partir d'une liste statique ou même à partir du contenu d'un fichier CSV ! Il ne vous reste plus qu'à profiter de la commande "New-Item" !