23/11/2024

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.

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"
Créer un dossier avec PowerShell
Créer un dossier avec PowerShell

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"
Créer un partage SMB avec PowerShell
Créer un partage SMB avec PowerShell

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$"
Lister les droits d'accès sur un partage SMB avec PowerShell
Lister les droits d'accès sur un partage SMB avec PowerShell

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"
PowerShell - Exemple Get-NTFSAccess
PowerShell - Exemple "Get-NTFSAccess"

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.

Attribuer des droits sur le partage avec Grant-SmbShareAccess
Attribuer des droits sur le partage avec Grant-SmbShareAccess

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.

author avatar
Florian BURNEL Co-founder of IT-Connect
Ingénieur système et réseau, cofondateur d'IT-Connect et Microsoft MVP "Cloud and Datacenter Management". Je souhaite partager mon expérience et mes découvertes au travers de mes articles. Généraliste avec une attirance particulière pour les solutions Microsoft et le scripting. Bonne lecture.
Partagez cet article Partager sur Twitter Partager sur Facebook Partager sur Linkedin Envoyer par mail