PowerShell et les lecteurs réseaux

Sommaire

Dans ce tutoriel sur le “scripting”, je vous propose de découvrir ou de voir comment gérer les lecteurs réseaux avec PowerShell et vous allez voir que ce n’est pas si “simple” que ça.

Dans le tutoriel : Mappage lecteur réseau : GPO et Script , j’explique comment mapper un lecteur réseau avec une stratégie de groupe en utilisant et comment le faire avec un script.

Avec PowerShell, il existe plusieurs façons de mapper un lecteur réseau et ici nous allons en voir 3 et vous allez voir que chacune à ses particularités avec ses avantages et ses inconvénients

Pour illustrer ce tutoriel, j’ai partagé un dossier share (C:\Share) accessible à tous le monde sur un serveur (LAB-DC1).

Shared folder

Dans le dossier Share, j’ai ajouté un sous dossier Folder_1 et My_File_1.txt.

Content of folder Share

Maintenant que nous avons le contexte, nous allons voir comment mapper un lecteur réseau avec PowerShell

L’ensemble des commandes PowerShell ont été exécutées dans une fenêtre PowerShell ouverte en tant qu’administrateur.

Etant dans un environnement Active Directory, je n’ai pas eu besoin d’utiliser de paramètres d’authentification (Credential).

New-PSDrive

La première Cmdlet, que nous allons voir est New-PSDrive . Si l’on décompose PSDrive voici ce que l’on a : PowerShell Session Drive.

Cette commande permet de mapper un lecteur réseau dans la session PowerShell, de ce fait, le lecteur réseau ne sera pas disponible depuis l’Explorateur Windows, sauf si celui-ci est persistant avec une portée (Scope) Global

Pour mapper un partage réseau à l’aide de la cmldlet New-PSDrive, il faut à minima passer les paramètres suivants :

Paramètre Valeur
-Name Correspond au nom qui sera utilisé pour mapper le lecteur, il n’est pas obligatoire d’utiliser une lettre
-Root Correspond au chemin UNC du partage.
-PSProvider FileSystem : on indique ici le type de lecteur mappé

Les paramètres suivants sont optionnels en fonction de votre environnement et de ce que vous souhaitez faire.

Paramètre Valeur
-Credential Permet de spécifier des informations d’identifications différentes que le compte en cours d’utilisation. Il faut utiliser la cmdlet Get-Credential.
-Persist Permet de rendre le lecteur permanant (persistant), en indiquant $true ou $false.
Par défaut la valeur est à $false.
-Description Permet d’indiquer une courte description.

Je vais maintenant vous montrez comment utiliser New-PSDrive pour mapper un partage réseau dans la session PowerShell.

<#
 New-PSDrive -Name "NameOfMappage" -Root "\\SERVER\NameOfShare" -PSProvider FileSystem
 #>
 
 # Only available in PowerShell Session
 New-PSDrive -Name "Share" -Root "\\LAB-DC1\Share" -PSProvider FileSystem

# Avalaible In PowerShell Session and Browser with  letter S
New-PSDrive -Name "S" -Root "\\LAB-DC1\Share" -Persist -PSProvider "FileSystem" -Scope Global

Si la commande a été correctement exécutée, elle retourne l’équivalent de Get-PSDrive :

Pour naviguer sur le partage, il faut utiliser la cmdlet Set-Location.

<#
 Set-Location -Path "NameOfMappage:"
It is necessary to add : after the name of the mapping
#> 
Set-Location -Path "Share:"

Sur la capture ci-après, on peut voir que l’on s’est déplacé sur le partage qui a été mappé.

En utilisant la commande dir , j’ai bien le contenu du dossier qui s’affiche.

dir on share folder mapped with new-psdrive

Pour supprimer le partage mappé, il faut utiliser la cmdlet Remove-PSDrive "NameOfMappage"

Vous l’aurez compris, mapper un partage avec New-PSDrive est utile quand on travaille avec PowerShell où sur un serveur sans interface graphique.

New-SmbMapping

Maintenant, nous allons voir la cmdlet New-SmbMapping , qui va nous permettre de mapper un partage SMB.

Avec cette cmdlet, le partage réseau sera mappé sur une lettre et sera accessible par l’explorateur de fichiers en tant que lecteur réseau.

L’utilisation de New-SmbMapping requière de passer à minima les deux paramètres suivant :

Paramètre Valeur
-LocalPath Lettre utilisée pour mapper le serveur (P:)
-RemotePath Chemin UNC du partage. (\\SERVER\Share)

Il est aussi possible de passer les paramètres suivants :

Paramètre Valeur
-Username Nom d’utilisateur
-Password Mot de passe du paramètre -Username
-SaveCredentials Permet de sauvegarde le couple de paramètre -Username / -Password
-Persistent Permet de rendre le lecteur permanant (persistant), en indiquant $true ou $false.
Par défaut la valeur est à $false.

D’autre paramètres sont disponibles, vous les trouverez sur la page Microsoft dédiée à la cmdlet New-SmbMapping .

Pour mapper le partage réseau en tant lecteur entrer la commande ci-dessous :

New-SmbMapping -LocalPath "S:" -RemotePath "\\LAB-DC1\Share"

La commande retourne un résumé de Get-SmbMapping .

Si vous allez dans l’explorateur de fichiers Windows, le lecteur est disponible.

Si le lecteur n’est pas disponible, il suffit de redémarrer, l’explorateur Windows. Depuis le gestionnaire des tâches, faire un clic droit dessus et cliquer sur Redémarrer.

Si vous avez utilisé le paramètre -Persistent $true, le lecteur réseau sera disponible à la prochaine ouverture de session normalement.

La cmdlet New-SmbMapping peut être utilisée dans des scripts d’ouverture de session, vue qu’elle nécessite de redémarrer l’Explorateur Windows, elle n’est pas forcément la plus adapté.

New-Object

La troisième et dernière solution, que je vous propose pour mapper un lecteur réseau avec PowerShell, c’est l’utilisateur de la cmdlet New-Object et l’utilisation de l’objet WScript.Network, cela ressemble de prêt au script que l’on peut faire avec du VBS.

Toujours lemême exemple, voici comment mapper le lecteur réseau :

# Load object
$Newwork = New-Object -ComObject "Wscript.Network"
# Map Network Drive
$Network.MapNetWorkDrive("S:", "\\LAB-DC1\Share")

Comment en VBS, le lecteur sera disponible immédiatement dans l’Explorateur Windows, il peut également être utilisé sans problème dans un script d’ouverture de session.

Conclusion

Vous savez maintenant comment mapper un lecteur réseau avec PowerShell, à vous de choisir la solution qui vont convient le mieux.

Romain Drouche

Romain Drouche

Architecte Système | MCSE: Core Infrastructure

Expert en infrastructures IT avec plus de 15 ans d'expérience sur le terrain. Actuellement Chef de projet Systèmes et Réseaux et Référent SSI (Sécurité des Systèmes d'Information), je mets mon expertise au service de la fiabilité et de la sécurité des environnements technologiques.

GHinM▶