Maper des lecteurs en fonction du réseau

Je me déplace pas mal avec mon portable (boulot, maison, amis, famille…), et j’en avais un peu marre de devoir entrer un chemin UNC, ou maper un lecteur réseau à la main chaque fois que je voulais accéder aux partages. Comme le bon Admin système et Réseau que je suis (synonyme : faignant), j’ai scripté. Je mets le script là pour ne pas l’oublier.

Bon, le portable est sous Windows XP (et oui, il sert pour le boulot… Et puis j’aime bien XP quand même). J’aurais pu scripter en VBS, mais le PowerShell, ça fait plus Geek (question de style).

Le script est tout simple : il récupère l’adresse IP, et mape les lecteurs déterminés en fonction du réseau dans lequel il se trouve.

$ip=((ipconfig | findstr [0-9].\.)[0]).Split()[-1]

if ($ip -cmatch « 192.168.0. »)

{

(New-Object -ComObject WScript.Network).MapNetworkDrive(« X: »,« \\192.168.0.1\partage1 »)

}

elseif ($ip -cmatch « 192.168.1. »)

{

(New-Object -ComObject WScript.Network).MapNetworkDrive(« X: »,« \\192.168.1.100\partage2 »)

(New-Object -ComObject WScript.Network).MapNetworkDrive(« Z: »,« \\192.168.1.100\partage3 »)

}

elseif ($ip -cmatch « 172.16.0. »)

{

$user=le_seb

$pass=*********

(New-Object -ComObject WScript.Network).MapNetworkDrive(« X: »,« \\172.16.0.253\partage2 », »false »,« $user »,« $pass »)

}

else

{

exit

}

Il n’y a plus qu’à appeler ce script avec un petit Batch :

powershell chemin\nom_du_script.ps1

Par défaut, Powershell à un comportement très restrictif (et étrange, à mon sens pour du cmdline) : il refuse catégoriquement d’exécuter les scripts. Pour modifier cette règle, ouvrez une fenêtre powerShell, et tapez :

Pour vérifier la politique de sécurité :

PS C:\> Get-ExecutionPolicy

Vous devriez alors obtenir le résultat suivant:

PS C:\> Get-ExecutionPolicy
Restricted

PowerShell propose 4 modes de sécurité différents:

  • Restricted
  • AllSigned
  • RemoteSigned
  • Unrestricted

Toujours dans l’interpréteur PowerShell entrez la commande suivante afin de changer de mode et d’autoriser l’exécution de script locaux :

PS C:\> Set-ExecutionPolicy RemoteSigned

Vous pouvez vérifier que le changement est bien été effectué en retapant la commande suivante:

PS C:\> Get-ExecutionPolicy

Vous devriez cette fois obtenir le résultat suivant:

PS C:\> Get-ExecutionPolicy
RemoteSigned

Notre script doit maintenant s’exécuter. Je vous l’accorde, il est basique, et souffre de nombreuses limitations. Il prend la première adresse IP qu’il trouve (souvent la bonne, cela dit, les cartes réseaux virtuelles sont souvent en dernier). Pas de test d’un second critère d’unicité, au cas où différents réseaux aient le même plan d’adressage… Mais pour le moment, c’est tout ce dont j’avais besoin.