Création d’un partage SMB en PowerShell
Dans ce chapitre, nous allons voir comment créer un nouveau partage SMB en PowerShell sur notre serveur Windows Server 2022 en mode Core. Même si le serveur n'a pas vocation à devenir un serveur de fichiers, cela peut s'avérer utile de créer un partage pour faciliter l'échange de données avec une autre machine.
Nous allons publier le partage "Partage$" associé au chemin "C:\Partage" sur le serveur. L'opération va se dérouler en plusieurs étapes. Tout d'abord, il faudra créer le dossier sur le serveur, puis ensuite déclarer le partage et finir par gérer les autorisations au niveau du système de fichiers NTFS.
Sommaire
I. Créer un dossier pour le partage avec PowerShell
Pour créer le dossier "Partage" à la racine de "C:", c'est tout simple puisqu'il suffit d'utiliser le cmdlet New-Item, de préciser le chemin du dossier à créer et le type d'élément (Directory pour un dossier).
Ce qui donne :
New-Item -ItemType Directory -Path "C:\Partage"
Le dossier étant créé, nous allons pouvoir le partager.
II. Déclarer un partage SMB avec PowerShell
Pour créer un partage avec PowerShell, il y a un cmdlet intégré à Windows qui se nomme New-SmbShare. Plusieurs paramètres doivent être précisés :
- -Name : le nom du partage, ici "Partage$" afin que le partage soit masqué
- -Path : le chemin complet vers le dossier à partager
- -FullAccess : droit de partage en contrôle total, ici pour le groupe "Administrateurs" du serveur
- -ReadAccess : droit de partage en lecture seule, ici pour le groupe "Utilisateurs" du serveur
Ce qui donne :
New-SmbShare -Name Partage$ -Path "C:\Partage\" -FullAccess "Administrateurs" -ReadAccess "Utilisateurs"
Il y a des options supplémentaires disponibles comme "-ChangeAccess" pour définir des droits de partage en lecture/écriture.
III. Lister les droits de partage avec PowerShell
Dès lors que le partage est créé, sachez que l'on peut lister les partages Get-SmbShare mais aussi lister les droits de partage de "Partage$", ce qui est un bon moyen de vérifier la configuration que l'on vient d'effectuer. Il suffit de lister les droits de partage comme ceci :
Get-SmbShareAccess -Name "Partage$"
IV. Gérer les droits NTFS sur le partage
Afin de gérer les droits NTFS sur le dossier correspondant à notre partage à l'aide de PowerShell, nous allons devoir installer un module complémentaire qui va nous simplifier la tâche : NTFSSecurity. Il s'installe facilement à l'aide de la commande suivante :
Install-Module NTFSSecurity
Ce module contient de nombreuses commandes (Get-Command -Module NTFSSecurity), nous allons en voir quelques-unes.
Commençons par lister les droits actuels de notre dossier "C:\Partage" :
Get-NTFSAccess -Path "C:\Partage"
Maintenant que l'on voit clairement les droits actuels du dossier, on peut décider d'ajouter des droits supplémentaires sur ce partage. Cela est possible avec la commande Add-NTFSAccess.
Par exemple, pour ajouter les droits de lecture et écriture sur le dossier "Partage" à l'utilisateur "florian" de notre domaine Active Directory, on doit exécuter cette commande :
Add-NTFSAccess -Path "C:\Partage\" -Account "[email protected]" -AccessRights Modify
Le paramètre "-AccessRights" sert à déterminer le niveau de droits à accorder à l'utilisateur sur le dossier. Il existe différentes valeurs possibles, comme FullControl pour le contrôle total, ou encore ReadAndExecute pour la lecture et l'exécution. En listant les autorisations, vous allez pouvoir vérifier que les droits sont bien attribués.
Si l'on souhaite retirer des droits, par exemple ceux que l'on vient d'attribuer, la commande aura une syntaxe similaire. La principale différence c'est que l'on va utiliser le cmdlet "Remove-NTFSAccess" à la place de "Add-NTFSAccess", ce qui est relativement explicite.
Remove-NTFSAccess -Path "C:\Partage\" -Account "[email protected]" -AccessRights Modify
En complément, je vous invite à lire mon article dédié à l'utilisation de NTFSSecurity via PowerShell.
V. Configurer le partage
Pour la configuration du partage et la gestion dans le temps, notamment pour gérer les autorisations, il est essentiel de connaître certaines commandes.
A. Ajouter des droits de partage avec PowerShell
Je vous rappelle que l'on peut consulter les droits de partage avec la commande Get-SmbShareAccess. Pour ajouter des droits de partage à un partage existant, une commande spécifique doit être utilisée : Grant-SmbShareAccess.
Pour ajouter des droits de partage en "lecture seule" à l'utilisateur "[email protected]" sur le partage "Partage$", il faut utiliser cette commande :
Grant-SmbShareAccess -Name "Partage$" -AccountName "[email protected]" -AccessRight Read -Force
Le paramètre "-AccessRight" accepte quatre valeurs différentes : Full (contrôle total), Read (lecture), Change (modifier), Custom. Le paramètre "-Force" sur cette commande (et celles qui suivront) permet d'appliquer la modification sans avoir de demande de confirmation.
La commande retourne les droits du partage et l'on voit bien les nouveaux droits que nous venons d'attribuer.
B. Supprimer des droits de partage avec PowerShell
À l'inverse, pour supprimer des droits de partage avec PowerShell, la commande Revoke-SmbShareAccess doit être utilisée. Elle s'utilise assez simplement, car il suffit de préciser le nom de l'utilisateur ou du groupe, et le nom du partage.
Revoke-SmbShareAccess -Name "Partage$" -AccountName "[email protected]" -Force
C. Bloquer l'accès à un partage avec PowerShell
Lorsque l'on gère des autorisations, il est possible d'ajouter des autorisations, mais aussi des refus explicites. Sur un partage, on peut ajouter une autorisation explicite via la commande Block-SmbShareAccess tandis que la commande Unblock-SmbShareAccess permettra de supprimer ce refus explicite.
Block-SmbShareAccess -Name "Partage$" -AccountName "[email protected]" -Force
Pour supprimer cette règle, il suffit d'utiliser Unblock-SmbShareAccess en conservant les mêmes paramètres.
Unblock-SmbShareAccess -Name "Partage$" -AccountName "[email protected]" -Force
D. Gérer le mode de mise en cache du partage avec PowerShell
Le cmdlet Set-SmbShare sert à configurer un partage SMB existant, notamment pour définir le mode de mise en cache sur ce partage. Sur un partage où vous ne souhaitez pas utiliser la mise en cache, via la fonctionnalité "Fichiers hors connexion" de Windows par exemple, il est préférable de la désactiver.
Vous pouvez récupérer la valeur actuelle sur le partage via la commande suivante :
Get-SmbShare -Name "Partage$" | Select-Object Name, CachingMode
Par défaut, la valeur associée est "Manual". Ensuite, pour modifier cette configuration afin de désactiver la mise en cache, il faut que l'on attribue la valeur "None" sur ce partage.
Set-SmbShare Partage$ -CachingMode None -Force
Si vous souhaitez désactiver cette option de mise en cache sur l'ensemble des partages de votre serveur, à l'exception des partages spéciaux (ceux gérés par le système), vous pouvez utiliser la commande ci-dessous. Dans l'exemple ci-dessous, j'exclus également les partages nommés "Profils" et "Admins" à titre d'exemple, ce qui vous sera utile si vous avez besoin d'ajouter des exclusions.
Get-SmbShare -Special $false | Where{ $_.Name -notin "Profils","Admins" } | Foreach{Set-SmbShare -Name $_.Name -CachingMode None -Force}
En complément, vous pouvez consulter la documentation Microsoft pour en savoir plus sur la commande Set-SmbShare.
Grâce à ce chapitre et aux différentes commandes PowerShell étudiées, vous êtes en mesure de créer et gérer un partage SMB sur un serveur Windows à l'aide de PowerShell.