• 4 heures
  • Facile

Ce cours est visible gratuitement en ligne.

course.header.alt.is_video

course.header.alt.is_certifying

J'ai tout compris !

Mis à jour le 11/07/2022

Gérez vos fichiers avec PowerShell

Connectez-vous ou inscrivez-vous gratuitement pour bénéficier de toutes les fonctionnalités de ce cours !

Nous allons voir dans ce chapitre la gestion des fichiers sous PowerShell. Rassurez-vous, comme nous utilisons un Windows Server avec une interface graphique, nous allons faire l’impasse sur les commandes MS-DOS. Par contre, il faut connaître quelques commandes de gestion de fichiers, nous ne devons pas perdre de vue notre objectif : créer des scripts PowerShell pour automatiser des tâches.

Gérez vos fichiers et dossiers simplement avec PowerShell

Apprenez à vous repérer dans le système de fichiers avec PowerShell

Démarrez votre serveur et lancez PowerShell, vous devriez vous trouver dans le répertoire par défaut utilisateur : C:\Users\Administrateurs. Bien sûr que si vous vous connectez avec un autre utilisateur, vous serez par défaut dans le répertoire utilisateur. Par savoir où l’on se situe, on va utiliser la commande  Get-Location  :

PS C:\Users\Administrateur> Get-Location
Path
----
C:\Users\Administrateur

Cool, nous voyons que nous sommes dans notre bon répertoire. C’est la même commande que pwd sous Linux (ou Unix).

Pour afficher le contenu d’un dossier, utilisez la commande Get-ChildItem :

PS C:\Users\Administrateur> Get-ChildItem


 Répertoire : C:\Users\Administrateur


Mode           LastWriteTime    Length Name
----           -------------    ------ ----
d-r---      28/06/2019 11:59           3D Objects
d-r---      28/06/2019 11:59           Contacts
d-r---      07/07/2019 17:59           Desktop
d-r---      28/06/2019 11:59           Documents
d-r---      28/06/2019 11:59           Downloads
d-r---      28/06/2019 11:59           Favorites
d-r---      28/06/2019 11:59           Links
d-r---      28/06/2019 11:59           Music
d-r---      28/06/2019 11:59           Pictures
d-r---      28/06/2019 11:59           Saved Games
d-r---      28/06/2019 11:59           Searches
d-r---      28/06/2019 11:59           Videos

Pour ceux qui ont connu le DOS, cela est équivalent à la commande  dir

PS C:\Users\Administrateur> dir


 Répertoire : C:\Users\Administrateur


Mode           LastWriteTime    Length Name
----           -------------    ------ ----
d-r---      28/06/2019 11:59           3D Objects
d-r---      28/06/2019 11:59           Contacts
d-r---      07/07/2019 17:59           Desktop
d-r---      28/06/2019 11:59           Documents
d-r---      28/06/2019 11:59           Downloads
d-r---      28/06/2019 11:59           Favorites
d-r---      28/06/2019 11:59           Links
d-r---      28/06/2019 11:59           Music
d-r---      28/06/2019 11:59           Pictures
d-r---      28/06/2019 11:59           Saved Games
d-r---      28/06/2019 11:59           Searches
d-r---      28/06/2019 11:59           Videos

Bon promis, je ne vous parle plus des commandes MS-DOS, il faut vivre avec son temps, utilisons maintenant uniquement le PowerShell !

Allez, nous allons créer un répertoire de sauvegarde SAVE dans notre dossier utilisateur ; utilisons la commande  New-Item  :

PS C:\Users\Administrateur> New-Item -Name "SAVE" -ItemType Directory


 Répertoire : C:\Users\Administrateur


Mode           LastWriteTime    Length Name
----           -------------    ------ ----
d-----      17/09/2019 10:38           SAVE

Bon, si on visualise le contenu de notre répertoire courant, nous verrons bien que le dossier SAVE a bien été créé. 

On peut également utiliser la commande  New-Item  pour créer un fichier texte utilisateurs.txt en tapant :

PS C:\Users\Administrateur> New-Item -Name "utilisateurs.txt" -ItemType File

Je peux utiliser aussi cette commande pour créer un fichier texte groupes.txt et y insérer du texte en tapant : 

PS C:\Users\Administrateur> New-Item -Name "groupes.txt" -ItemType File -Value "Voici la Liste des Groupes"

Pour visualiser le contenu du fichier texte, tapez la commande suivante :

PS C:\Users\Administrateur> notepad.exe groupes.txt
Editez votre fichier une fois ouvert avec PowerShell
Éditez votre fichier une fois ouvert avec PowerShell

Manipulez vos fichiers avec PowerShell

Nous allons copier notre fichier utilisateurs.txt dans notre répertoire SAVE en tapant la commande suivante : 

PS C:\Users\Administrateur> Copy-Item -Path utilisateurs.txt -Destination SAVE

Si nous allons voir le contenu de SAVE, nous verrons que notre fichier utilisateurs.txt a bien été copié. 

PS C:\Users\Administrateur> Get-ChildItem SAVE


 Répertoire : C:\Users\Administrateur\SAVE


Mode           LastWriteTime Length Name
----           ------------- ------ ----
-a----      06/07/2019 15:35      0 utilisateurs.txt

Vous remarquerez que pour visualiser le contenu de SAVE, j’ai utilisé la commande Get-ChildItem avec un attribut (SAVE) sans m’être déplacé dans mon répertoire SAVE ; pensez à utiliser les attributs avec vos commandes PowerShell, elles vous permettent d’aller souvent plus vite. 

Bon c’est cool, et si je veux déplacer maintenant le fichier groupes.txt, j’utiliserai la commande suivante :

PS C:\Users\Administrateur> Move-Item -Path C:\Users\Administrateur\groupes.txt -Destination C:\Users\Administrateur\SAVE

Vérifions le contenu de nos 2 répertoires, notre fichier groupes.txt a bien été déplacé.

PS C:\Users\Administrateur> Get-ChildItem


 Répertoire : C:\Users\Administrateur


Mode           LastWriteTime    Length Name
----           -------------    ------ ----
d-r---      28/06/2019 11:59           3D Objects
d-r---      28/06/2019 11:59           Contacts
d-r---      07/07/2019 17:59           Desktop
d-r---      28/06/2019 11:59           Documents
d-r---      28/06/2019 11:59           Downloads
d-r---      28/06/2019 11:59           Favorites
d-r---      28/06/2019 11:59           Links
d-r---      28/06/2019 11:59           Music
d-r---      28/06/2019 11:59           Pictures
d-r---      28/06/2019 11:59           Saved Games
d-r---      28/06/2019 11:59           Searches
d-r---      28/06/2019 11:59           Videos
-a----      06/07/2019 15:35         0 utilisateurs.txt

PS C:\Users\Administrateur> Get-ChildItem SAVE


 Répertoire : C:\Users\Administrateur\SAVE


Mode           LastWriteTime Length Name
----           ------------- ------ ----
-a----      06/07/2019 15:37     26 groupes.txt
-a----      06/07/2019 15:35      0 utilisateurs.txt

Bon, si vous regardez de plus près, je viens de faire le déplacement du fichier groupes.txt différemment de la copie du fichier utilisateurs.txt. Eh oui, on a utilisé ce que l’on appelle les chemins relatifs pour la copie du fichier utilisateurs.txt, c’est-à-dire que l’on n'a pas utilisé d’anti-slash. Si j’utilise les chemins absolus (anti-slash en préfixe du chemin), je dois taper le lien complet du fichier et du dossier de destination, et c’est ce que je viens de faire pour le déplacement du fichier groupes.txt.

Vous devez maîtriser les deux types de déplacement car cela va plus vite d’utiliser les chemins relatifs mais on peut faire des erreurs ; on privilégiera plus souvent les chemins absolus. Et surtout, n’hésitez pas à utiliser l’autocomplétion, vous allez beaucoup plus vite et vous évitez les erreurs de frappe. 

On peut renommer également notre fichier utilisateurs.txt dans notre répertoire SAVE par utilisateurs_save.txt en tapant la commande suivante :

PS C:\Users\Administrateur> Rename-Item -Path C:\Users\Administrateur\SAVE\utilisateurs.txt -NewName C:\Users\Administrateur\SAVE\utilisateurs_save.txt

On peut voir que notre fichier utilisateurs.txt a bien été renommé en utilisateurs_save.txt :

PS C:\Users\Administrateur> Get-ChildItem SAVE


 Répertoire : C:\Users\Administrateur\SAVE


Mode           LastWriteTime Length Name
----           ------------- ------ ----
-a----      06/07/2019 15:37     26 groupes.txt
-a----      06/07/2019 15:35      0 utilisateurs_save.txt

Tiens, je souhaite créer un sous-dossier OU dans SAVE, comment faire ? Je peux utiliser la commande New-Item comme ceci :

PS C:\Users\Administrateur> New-Item -Path C:\Users\Administrateur\SAVE\OU -ItemType Directory


 Répertoire : C:\Users\Administrateur\SAVE


Mode           LastWriteTime Length Name
----           ------------- ------ ----
d-----      17/09/2019 10:45        OU

PS C:\Users\Administrateur> Get-ChildItem C:\Users\Administrateur\SAVE


 Répertoire : C:\Users\Administrateur\SAVE


Mode           LastWriteTime Length Name
----           ------------- ------ ----
d-----      17/09/2019 10:45        OU
-a----      06/07/2019 15:37     26 groupes.txt
-a----      06/07/2019 15:35      0 utilisateurs_save.txt

Maintenant, nous allons copier le contenu de notre dossier personnel SAVE  dans un autre dossier SAUVEGARDE, mais qui sera à la racine du disque dur.

Allons-y, créons d’abord un dossier SAUVEGARDE à la racine du disque dur en tapant :

PS C:\Users\Administrateur> New-Item -Path "C:\SAUVEGARDE" -ItemType Directory


 Répertoire : C:\


Mode           LastWriteTime Length Name
----           ------------- ------ ----
d-----      17/09/2019 10:46        SAUVEGARDE

Et voilà :

PS C:\Users\Administrateur> Get-ChildItem C:\


 Répertoire : C:\


Mode           LastWriteTime Length Name
----           ------------- ------ ----
d-----      15/09/2018 09:19        PerfLogs
d-r---      06/07/2019 19:27        Program Files
d-----      15/09/2018 18:38        Program Files (x86)
d-----      17/09/2019 10:46        SAUVEGARDE
d-r---      17/09/2019 10:35        Users
d-----      17/09/2019 10:30        Windows

Bon, ben nous allons maintenant copier le contenu de notre répertoire SAVE du dossier utilisateur Administrateur vers ce dossier SAUVEGARDE en tapant : 

PS C:\Users\Administrateur> Copy-Item -Path C:\Users\Administrateur\SAVE\ -Destination C:\SAUVEGARDE\ -Recurse
PS C:\Users\Administrateur> Get-ChildItem C:\SAUVEGARDE


 Répertoire : C:\SAUVEGARDE


Mode           LastWriteTime Length Name
----           ------------- ------ ----
d-----      17/09/2019 10:47        SAVE

Nous voyons bien que le dossier SAVE a bien été copié dans le dossier SAUVEGARDE. Et si nous vérifions le contenu du dossier SAVE dans le dossier SAUVEGARDE, comme ceci...

PS C:\Users\Administrateur> Get-ChildItem C:\SAUVEGARDE\SAVE


 Répertoire : C:\SAUVEGARDE\SAVE


Mode           LastWriteTime Length Name
----           ------------- ------ ----
d-----      17/09/2019 10:47        OU
-a----      06/07/2019 15:37     26 groupes.txt
-a----      06/07/2019 15:35      0 utilisateurs_save.txt

... l’attribut -Recurse nous a permis de copier les fichiers et les sous-dossiers, très pratique pour faire des sauvegardes de dossiers et de sous-dossiers.

Par contre, cette commande a copié le contenu du dossier SAVE du répertoire personnel Administrateur dans SAUVEGARDE ; mais j’aurai voulu qu’il ne recrée pas un dossier SAVE dans C:\SAUVEGARDE.

Nous allons donc supprimer le dossier SAUVEGARDE en tapant la commande suivante, puis en tapant T pour tout supprimer :

PS C:\Users\Administrateur> Remove-Item C:\SAUVEGARDE\

Confirmer
L'élément situé à l'emplacement C:\SAUVEGARDE\ a des enfants et le paramètre
Recurse n'a pas été spécifié.
Si vous continuez, tous les enfants seront supprimés avec l'élément. Êtes-vous
sûr de vouloir continuer ?
[O] Oui [T] Oui pour tout [N] Non [U] Non pour tout [S] Suspendre [?] Aide
(la valeur par défaut est « O ») :T

Vérifions que le dossier SAUVEGARDE a bien été supprimé :

PS C:\Users\Administrateur> Get-ChildItem C:\


 Répertoire : C:\


Mode           LastWriteTime Length Name
----           ------------- ------ ----
d-----      15/09/2018 09:19        PerfLogs
d-r---      06/07/2019 19:27        Program Files
d-----      15/09/2018 18:38        Program Files (x86)
d-r---      17/09/2019 10:35        Users
d-----      17/09/2019 10:30        Windows

 Bon, ben nous allons maintenant copier notre répertoire SAVE du dossier utilisateur Administrateur vers le dossier SAUVEGARDE en tapant ceci, mais en ne créant pas le répertoire SAVE :

PS C:\Users\Administrateur> Copy-Item -Path C:\Users\Administrateur\SAVE\ -Destination C:\SAUVEGARDE\ -Recurse 

Et maintenant, vérifions le contenu du répertoire SAUVEGARDE :

PS C:\Users\Administrateur> Get-ChildItem C:\SAUVEGARDE


 Répertoire : C:\SAUVEGARDE


Mode           LastWriteTime Length Name
----           ------------- ------ ----
d-----      17/09/2019 10:57        OU
-a----      06/07/2019 15:37     26 groupes.txt
-a----      06/07/2019 15:35      0 utilisateurs_save.txt

Super, on a bien copié le contenu de notre répertoire utilisateur Administrateur vers le dossier SAUVEGARDE.

Partagez des fichiers avec PowerShell

Créez vos dossiers partagés avec PowerShell

Nous allons voir maintenant comment créer un dossier partagé sous PowerShell. Il faut le faire comme avec l’interface graphique en 3 étapes :

  1. Créez un dossier classique.

  2. Créez le partage.

  3. Configurez les droits de partage. 

Nous allons partager notre dossier SAUVEGARDE déjà créé précédemment, en tapant la commande suivante :

PS C:\Users\Administrateur> New-SmbShare -Name Sauvegarde -Path C:\SAUVEGARDE -FullAccess Administrateurs

Name       ScopeName Path          Description
----       --------- ----          -----------
Sauvegarde *         C:\SAUVEGARDE

Cette commande permet de partager le dossier C:\SAUVEGARDE en créant un nom de partage Sauvegarde et en donnant le contrôle total au groupe Administrateurs.

Je peux aller voir avec l’explorateur de Windows que mon dossier est bien partagé :

Fenêtre de configuration du dossier Sauvegarde
Fenêtre de configuration du dossier SAUVEGARDE

Et si je vais voir dans l’onglet Partage :

Fenêtre de configuration de Partage avancé du dossier SAUVEGARDE
Fenêtre de configuration de partage avancé du dossier SAUVEGARDE

Ainsi que ses droits de partage :

Autorisations pour Sauvegarde
Autorisations pour sauvegarde

Gérez vos droits de partage avec PowerShell

Nous pouvons modifier les droits de partage en rajoutant les droits de lecture à tout le monde en tapant la commande suivante : 

PS C:\Users\Administrateur> Grant-SmbShareAccess -Name Sauvegarde -AccountName "Tout le Monde" -AccessRight Read

On peut mettre comme droit (AccessRight) :

  • Full : contrôle total ;

  • Change : modifier ;

  • Read : lecture ;

  • Custom : personnalisé.

Cliquer sur T pour Oui pour tout. Les nouveaux droits du répertoire s’affichent.

PS C:\Users\Administrateur> Grant-SmbShareAccess -Name Sauvegarde -AccountName "Tout le Monde" -AccessRight Read

Confirmer
Êtes-vous sûr de vouloir effectuer cette action ?
Opération « Modify » en cours sur la cible « *,Sauvegarde ».
[O] Oui [T] Oui pour tout [N] Non [U] Non pour tout [S] Suspendre [?] Aide
(la valeur par défaut est « O ») :T

Name       ScopeName AccountName             AccessControlType AccessRight
----       --------- -----------             ----------------- -----------
Sauvegarde *         BUILTIN\Administrateurs Allow             Full
Sauvegarde *         Tout le monde           Allow             Read

On peut les visualiser de manière graphique :

Paramètres de partage modifiés avec la console PowerShell
Paramètres de partage modifiés avec la console PowerShell

Mais on peut  aussi visualiser le nom de partage mais aussi les droits sur les partages avec la commande PowerShell suivante :

PS C:\Users\Administrateur> Get-SmbShareAccess -Name Sauvegarde

Confirmer
Êtes-vous sûr de vouloir effectuer cette action ?
Opération « Modify » en cours sur la cible « *,Sauvegarde ».
[O] Oui [T] Oui pour tout [N] Non [U] Non pour tout [S] Suspendre [?] Aide
(la valeur par défaut est « O ») :T

Name       ScopeName AccountName             AccessControlType AccessRight
----       --------- -----------             ----------------- -----------
Sauvegarde *         BUILTIN\Administrateurs Allow             Full
Sauvegarde *         Tout le monde           Allow             Read

 On peut visualiser aussi les droits de sécurité sur le dossier C:\SAUVEGARDE en tapant la commande suivante : 

PS C:\Users\Administrateur> Get-Acl C:\SAUVEGARDE | fl


Path   : Microsoft.PowerShell.Core\FileSystem::C:\SAUVEGARDE
Owner  : BUILTIN\Administrateurs
Group  : LAVACHETTE\Utilisateurs du domaine
Access : AUTORITE NT\Système Allow FullControl
         BUILTIN\Administrateurs Allow FullControl
         BUILTIN\Utilisateurs Allow ReadAndExecute, Synchronize
         BUILTIN\Utilisateurs Allow AppendData
         BUILTIN\Utilisateurs Allow CreateFiles
         CREATEUR PROPRIETAIRE Allow 268435456
Audit  :
Sddl   : O:BAG:DUD:AI(A;OICIID;FA;;;SY)(A;OICIID;FA;;;BA)(A;OICIID;0x1200a9;;;BU)(A;CIID;LC;;;BU)(A;CIID;DC;;;BU)(A;OICIIOID;GA;;;CO)

Nous ne verrons pas dans ce cours comment modifier les droits de sécurité sous PowerShell.

Affichez le contenu de vos répertoires partagés avec PowerShell

Bon, c’est super, mais maintenant que j’ai créé mon répertoire partagé, qu'est-ce que j'en fais ?

Déjà, nous pouvons vérifier le contenu du répertoire partagé nommé Sauvegarde comme ceci (mon nom de serveur est Serveur, si le vôtre est différent, pensez à adapter la commande ou renommer votre serveur) :

PS C:\Users\Administrateur> Get-ChildItem \\Serveur\Sauvegarde


 Répertoire : \\Serveur\Sauvegarde


Mode           LastWriteTime Length Name
----           ------------- ------ ----
d-----      17/09/2019 10:57        OU
-a----      06/07/2019 15:37     26 groupes.txt
-a----      06/07/2019 15:35      0 utilisateurs_save.txt

Si vous utilisez l’attribut -Force avec Get-ChildItem, cela vous permet d’afficher également les fichiers cachés, pensez à le tester !

Cool car cela offre maintenant plein de possibilités. Je peux m’amuser maintenant à utiliser les commandes PowerShell, vues précédemment, de déplacement et de copie de fichiers et de dossiers vers un répertoire partagé. Génial car c’est le but recherché dans ce cours, réaliser des scripts de sauvegarde sous PowerShell !

Et on y vient dans le prochain chapitre, nous allons voir comment créer des scripts sous PowerShell.

Résumé

Dans ce chapitre, nous avons vu :

  • la commande  Get-Location  qui permet de savoir dans quel dossier on se situe ;

  • la commande  Get-ChildItem  qui permet de lister le contenu d’un répertoire ;

  • la commande  New-Item  qui permet de créer des répertoires et des fichiers textes vides ou non vides ;

  • la commande de copie de fichiers ou de répertoires  :  Copy-Item  ;

  • la commande de déplacement de fichiers ou de répertoires  :  Move-Item  ;

  • la commande d’effacement de fichiers ou de répertoires  :  Remove-Item  ;

  • la commande de renommage de fichiers ou de répertoires  :  Rename-Item  ;

  • la commande  New-SmbShare  qui permet de créer un partage de dossier ;

  • la commande  Grant-SmbShareAccess  qui permet de rajouter des autorisations d’accès à des utilisateurs ou à des groupes sur un répertoire partagé.

Dans le prochain chapitre, nous allons voir comment créer des scripts sous PowerShell.

Exemple de certificat de réussite
Exemple de certificat de réussite