Créer un lien symbolique sous PowerShell

I. Présentation

Dans ce tutoriel, nous allons apprendre à créer un lien symbolique avec PowerShell, sur une machine Windows.

Chez les linuxiens, cela se gère par la commande ln -s. Mais il n'existe pas une commande dédiée en PowerShell, c'est un peu plus subtil que ça... Mais en même temps logique.

Vous allez voir 😉

Il faut savoir qu'il existe la commande native "mklink" qui permet de créer un lien symbolique sous Windows. Néanmoins, nous ne sommes pas à l'abri que cette commande historique disparaisse : il est préférable de savoir le faire avec Powershell.

II. Prérequis

  • Windows PowerShell version 5.1, ou PowerShell Core version 7+

III. À quoi ça sert un lien symbolique ?

Qu'est-ce que c'est que cette bête-là ? Et puis d'abord à quoi ça sert ?

Un lien symbolique, c'est un peu comme un raccourci sur votre bureau. Il s'agit d'un fichier un peu spécial qui pointe vers un autre fichier.

Concrètement, le fichier "lien symbolique" ne contient aucune donnée du fichier cible.

À noter que je parle de fichiers depuis tout à l'heure, mais on peut faire un lien symbolique aussi bien vers un répertoire qu'un fichier, que ceux-ci soient locaux à notre machine, ou accessibles à distance, sur un partage DFS par exemple.

Vous souhaitez un exemple concret d'utilisation ?

Ok, c'est parti 🙂

Sur mon PC Windows, j'utilise aussi bien Windows PowerShell (version 5.1) que PowerShell Core (version 7).

Il s'agit bien de deux versions de PowerShell différente et à ce titre, les fichiers de profils personnalisés sont différents.

Sauf que personnellement, je n'ai pas envie de gérer deux fichiers sur mon système : 1 seul profil est bien suffisant.

Du coup, j'ai stocké mon fichier profile.ps1 dans un répertoire sur ma machine, puis j'ai créé deux liens symboliques (1 pour Windows PowerShell, et 1 pour PowerShell 7) afin de pointer sur le même fichier.

Toujours dans la même logique, si je veux avoir le même environnement customisé sur les serveurs distants sur lesquels je me connecte, je peux créer un lien symbolique vers le dossier partagé sur lequel j'ai stocké ce profil, par exemple.

Un autre cas d'utilisation...

Dernier cas d'utilisation assez courant, si vous trackez vos fichiers de configuration via Git, vous pouvez mettre tous vos fichiers de configuration applicatifs dans un seul répertoire, par exemple Repos\Config.

Il vous reste ensuite pour chaque application à créer les liens symboliques pointant vers les fichiers de configuration stockés dans ce répertoire.

Plutôt pratique, pour deux raisons :

  1. Vous ne suivez qu'un dépôt Git. Vous appliquez ainsi le principe du Keep it easy.
  2. Vos liens symboliques pointant vers le dépôt Git, dès que vous mettrez celui-ci à jour, vos applications prendront immédiatement en compte les nouveaux fichiers de configuration. Plus d'opération de copier/coller manuelle à prévoir.

 

IV. Créer un lien symbolique sous PowerShell

Reprenons le cas concret du profil PowerShell. Pour savoir où ce profil est stocké, tapez la commande :

$profile.CurrentUserAllHosts

Dans mon cas, ayant lancé cette commande sous PowerShell 7, mon fichier profil est stocké à cet endroit :

C:\Users\Thibault\Documents\PowerShell\profile.ps1

Je me déplace donc dans mon dossier C:\Users\Thibault\Documents\, puis je vais vérifier si le dossier PowerShell existe :

Test-Path ./PowerShell

La réponse étant false, je vais créer ce dossier, ce qui me permettra par la suite de créer mon lien symbolique :

New-Item -ItemType Directory -Name PowerShell

Mais plutôt que de créer un fichier classique profile.ps1, nous allons cette fois créer le fameux lien symbolique, pointant sur le "vrai" fichier de configuration profile.ps1, stocké dans mon dépôt Git.

Comment ? Également via la commande New-Item. Et oui ! Cette même commande que l'on utilise pour créer nouveaux répertoires et nouveaux fichiers.

Note : Il vous faudra les droits d'administration pour créer un nouveau lien symbolique.

On va donc réutiliser la commande New-ItemType en indiquant cette fois comme ItemType un SymbolicLink :

New-Item -ItemType SymbolicLink -Path .\PowerShell\profile.ps1 -Target E:\Repos\config\PowerShell\profile.ps1
  • Le paramètre -Path indique ici le nom du lien symbolique à créer. PowerShell attendant un fichier nommé profile.ps1 pour contenir mon environnement custom, je vais donc nommer comme cela mon lien symbolique.
  • Le paramètre -Target indique le fichier cible sur lequel mon lien symbolique va pointer.

 

Si on vérifie le contenu du dossier PowerShell, on va effectivement voir un nouveau lien symbolique, qui va s'afficher de la manière suivante : <nom-du-lien-symbolique> -> <cible>

Lien symbolique PowerShell
Exemple d'un lien symbolique créé avec PowerShell

Et voilà, votre lien symbolique est créé.

Si vous ne me croyez pas, allez-y, il vous suffit de modifier le fichier cible pour que la modification soit prise en compte par votre application.

Fini les repository Git multipliés à outrance, vous pourrez maintenant centraliser tous vos fichiers de configuration sur un seul et même répertoire.

Elle n’est pas belle la vie ?

Partagez cet article Partager sur Twitter Partager sur Facebook Partager sur Linkedin Partager sur Google+ Envoyer par mail

Thibault Baheux

Responsable Infrastructure IT, Geek, Manager de geeks, Je travaille au quotidien sur une infra Cloud privée / Cloud Azure, aussi bien Windows que Linux. Je me passionne pour Azure & AWS, le DevOps, la sécurité & la programmation objet (PowerShell / Python). Si je ne suis pas derrière mon clavier, vous me trouverez dans une salle de blocs ou devant un bon mur d’escalade.

thibault-baheux has 14 posts and counting.See all posts by thibault-baheux

One thought on “Créer un lien symbolique sous PowerShell

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *

 

Ce site utilise Akismet pour réduire les indésirables. En savoir plus sur comment les données de vos commentaires sont utilisées.