Dans ce chapitre, nous allons voir la gestion des fichiers avec PowerShell. Vous allez bientôt connaître quelques commandes de gestion de fichiers en plus des quelques commandes que vous avez déjà pu voir tout au long des chapitres précédents.
Pour commencer, nous allons partir de PowerShell ISE et retourner dans l’invite de commandes PowerShell. Pour savoir où l’on se situe, on va utiliser la cmdlet Get-Location .

Parfait. Le résultat de la cmdlet Get-Location confirme le prompt : nous sommes dans le dossier utilisateur.
Pour afficher le contenu d’un dossier, utilisez la commande Get-ChildItem :

Vous allez créer un répertoire de Sauvegardes dans votre dossier utilisateur.
Pour cela, utilisez la cmdlet et les options suivantes : New-Item -Name “Sauvegardes” -ItemType Directory .

Si on regarde la cmdlet et ses options, nous pouvons déduire les éléments suivants :
-Name “Sauvegardes” indique le nom de l’élément qui va être créé ;
-ItemType Directory (ou “dossier”, en français) indique le type de l’élément qui va être créé.
Si on précise le type Directory, est-ce que ça veut dire qu’on peut créer d’autres types d’éléments avec New-Item ?
En effet, vous pouvez très bien décider de créer un fichier texte, par exemple. Dans ce cas, vous pouvez utiliser la cmdlet New-Item avec le paramètre -ItemType et la valeur File .

Tant qu’on y est, je vous propose maintenant de créer un fichier texte, et d’y inscrire du contenu. Vous pouvez pour ça utiliser le paramètre -value suivi du texte entre guillemets.

Et comment être sûr que le contenu est bien écrit ? En affichant le contenu du fichier, bien sûr ! Et pour ça, vous pouvez utiliser la cmdlet Get-Content suivie du nom du fichier.

Avoir des fichiers et des dossiers créés, c’est bien, mais nous allons essayer d’aller un petit peu plus loin dans nos manipulations.
Je vous propose de commencer par sauvegarder le fichier que vous venez de créer, fichier.txt.
Pour ce faire, vous allez devoir faire appel à une nouvelle cmdlet à ajouter à votre arsenal : Copy-Item .
Copy-Item est la cmdlet à connaître si vous souhaitez copier des fichiers d’un chemin source vers une destination.
Essayez de copier votre fichier dans le dossier de sauvegarde.

Vous remarquerez deux choses importantes :
Pour visualiser le contenu du nouveau dossier, j’ai utilisé la cmdlet Get-ChildItem avec un attribut (.\Sauvegardes\) sans m’être déplacé dans mon répertoire de destination.
Je n’ai pas utilisé de paramètres. Ceux-ci sont sous-entendus. Mais il s’agit des paramètres :
-Path : le fichier que vous souhaitez copier ;
-Destination : le dossier qui va accueillir votre fichier.

Ces paramètres sont communs à presque toutes les cmdlets de gestion de fichiers.
La cmdlet Copy-Item possède une option très utile qui s’écrit -recurse . Elle permet de copier tous les fichiers et les dossiers/sous-dossiers d’un répertoire. C’est donc une option essentielle pour dupliquer une arborescence complète.
Bien. Disons que maintenant, vous voulez déplacer, et non plus copier, le fichier Groupes.txt.
Pour ce faire, vous pouvez utiliser non pas la cmdlet Copy-Item , mais Move-Item .

Je vous laisse vérifier dans le dossier source du fichier, mais vous pouvez être certain qu’avec un Move-Item , votre fichier aura été déplacé et non pas juste copié.
Je souhaiterais faire un petit aparté rapide concernant les chemins.

Si vous regardez bien, dans les deux cas, je fais un Get-ChildItem . Le premier avec le nom de chemin complet, le second avec ‘ .\ ‘ devant.
La première écriture du chemin s’appelle chemin absolu. Le chemin absolu permet d’appeler le fichier directement par son adresse complète.
La seconde écriture est nommée chemin relatif. Le chemin relatif est, comme indiqué, relatif à l’endroit où l’on se situe.
Par exemple, dans notre cas, je suis positionné dans le dossier C:\Users\stiven comme nous le montre le prompt. Si je fais un Get-ChildItem .\Sauvegardes\ , je vais aller dans le dossier “Sauvegardes” présent dans le chemin courant (donc C:\Users\stiven). Ce qui explique le “.” en début de chemin.
Si jamais j’étais dans C:\Users\ , j’obtiendrais une erreur, car le chemin relatif .\Sauvegardes\ n’existe pas.
Vous devez maîtriser les deux types d’écriture. Le chemin absolu, bien qu’il semble plus simple au premier abord, ne possède pas la même souplesse que le chemin relatif. Si jamais vous devez changer de dossier source dans un script, par exemple en le déployant sur un autre serveur, vous aurez plus de modifications à effectuer.
Vu que vous me semblez assidu et particulièrement doué 😀, vous allez pouvoir mettre en application l’usage d’un chemin absolu et un nouveau paramètre pour la cmdlet New-Item : le paramètre -Path .
Celui-ci va vous permettre de spécifier le chemin que vous souhaitez créer sans que ce soit obligatoirement dans le chemin courant. Essayez de créer un nouveau dossier Sauvegardes, mais cette fois à la racine du disque C directement.

Continuons notre exploration des cmdlets usuelles pour travailler sur les fichiers.
Vous avez créé un fichier nommé “fichier.txt” dans votre dossier. C’est bien, mais le nom ne vous plaît plus. Si si, je vous assure, vous ne voulez plus qu’il s’appelle comme ça.
Je vous propose d’utiliser la cmdlet Rename-Item pour renommer votre fichier en Utilisateurs.txt.
La cmdlet s’utilise avec la même logique qu’un déplacement de fichier : Rename-Item .\fichier.txt Utilisateurs.txt .

Félicitations ! Vous savez désormais créer des fichiers, des dossiers, les déplacer, les renommer, les supprimer… Attendez. Non ! Vous n’avez pas encore appris à supprimer un fichier.
Je vous propose d’essayer de supprimer votre dossier de sauvegardes. Après tout, vous en avez créé un nouveau dans C:\.
La cmdlet pour supprimer un fichier ou un dossier est Remove-Item .
Elle s’utilise avec le paramètre -Path, comme pour les autres cmdlets.

Notez que si vous essayez de supprimer un dossier avec des fichiers présents dedans, PowerShell vous demandera une confirmation. Dans votre cas, vous pouvez entrer T pour tout supprimer.
Maintenant que vous savez créer des fichiers et des dossiers et les manipuler, vous allez pouvoir commencer à travailler sur des fonctions liées au partage.
La logique de partage de dossier avec PowerShell est la même que quand vous utilisez l’interface graphique de Windows.
Globalement, les étapes pourraient être résumées de la manière suivante :
Créez un dossier classique.
Créez le partage.
Configurez les droits de partage.
L’étape 1, vous l’avez déjà faite en créant votre dossier de sauvegarde. C’est celui-ci que vous allez pouvoir utiliser.
Vous allez créer votre premier partage de dossier. Pour ça, vous pouvez utiliser la cmdlet suivante, dans une invite PowerShell que vous aurez ouverte en administrateur : New-SmbShare -Name Sauvegarde -Path C:\Sauvegardes\ -FullAccess Administrateurs

Cette commande permet de partager le dossier C:\Sauvegardes (-Path) en créant un nom de partage Sauvegarde (-Name) et en donnant le contrôle total au groupe Administrateurs (-FullAccess).
Et si vous allez voir le partage avec l’explorateur de fichiers, vous verrez qu’il a bien été créé, et avec les bons droits, en plus !


Vous allez maintenant essayer de modifier les droits de partage en ajoutant les droits de lecture à tout le monde avec la cmdlet suivante :
Grant-SmbShareAccess -Name Sauvegarde -AccountName "Tout le Monde" -AccessRight Read
Pour cette cmdlet, les paramètres -Name permettent de sélectionner sur quel partage va être effectué le changement, -AccountName permet de sélectionner l’utilisateur ou le groupe concerné. Ici, ce sera “Tout le monde”. Enfin, le dernier paramètre, -AccessRight , permet de définir les droits à appliquer.
Vous pouvez utiliser les valeurs suivantes pour affiner les droits à appliquer :
Full : contrôle total ;
Change : modifier ;
Read : lecture ;
Custom : personnalisé.
Cliquez sur T pour Oui pour tout. Les nouveaux droits du répertoire s’affichent.

Là encore, vous pouvez aller vérifier de manière graphique.

Il n’y pas un moyen de vérifier autrement que par l’explorateur de fichier ? Genre avec une cmdlet ?
C’est exactement la logique que j’essaie de vous faire adopter : trouver une cmdlet qui corresponde à votre besoin, pour éventuellement à terme vous la faire utiliser dans un script PowerShell.
Cette cmdlet se nomme Get-SmbShareAccess et demande comme paramètre et valeur “-Name Sauvegarde”.

Comme vous pouvez le voir, les informations sont identiques. Mais sans avoir eu à utiliser plusieurs fois votre souris et l’explorateur.
Avec cette cmdlet, vous avez vu les informations sur le partage. Tant qu’on y est, je vais vous montrer la cmdlet pour voir les droits de sécurité sur le dossier C:\Sauvegardes avec la cmdlet Get-Acl -Path C:\Sauvegarde | Format-List .

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à, vous pouvez vérifier le contenu du répertoire partagé nommé Sauvegarde via le chemin UNC.
Le chemin UNC est un chemin réseau composé de la manière suivante :
\\ Indique le début du chemin UNC ;
Nom du PC ou serveur ;
suivi d’un \Nom du partage.
Par exemple, dans le cas de mon PC qui s’appelle “VM”, le chemin UNC est : \\VM\Sauvegarde.

Cela nous offre maintenant plein de possibilités. Surtout, n’hésitez pas à vous amuser à utiliser les cmdlets PowerShell, vues précédemment, de déplacement et de copie de fichiers et de dossiers, vers un répertoire partagé.
La commande Get-Location permet de savoir dans quel dossier on se situe.
La commande Get-ChildItem permet de lister le contenu d’un répertoire.
La commande New-Item permet de créer des répertoires et des fichiers textes vides ou non vides.
La commande Copy-Item permet de copier des fichiers ou des répertoires.
La commande Move-Item permet de déplacer des fichiers ou des répertoires.
La commande Remove-Item permet d’effacer des fichiers ou des répertoires.
La commande Rename-Item permet de renommer des fichiers ou des répertoires.
La commande New-SmbShare permet de créer un partage de dossier.
La commande Grant-SmbShareAccess permet d’ajouter des autorisations d’accès à des utilisateurs ou à des groupes sur un répertoire partagé.
Maintenant que vous savez gérer des dossiers et des fichiers, et les partager, vous allez pouvoir découvrir la configuration d’Active Directory avec PowerShell.