Petit rappel pour commencer:

. équivaut est relatif à là où vous exécutez la commande dans une console, et à là ou vous exécutez le script dans un contexte de script.

$PSScriptRoot n’existe que dans un contexte de script, il renvoie la racine du script.

PS C:\Users\rober\OneDrive\Documents\PowerShell\2-Tests\ledot> .\ledot.ps1

    Directory: C:\Users\rober\OneDrive\Documents\PowerShell\2-Tests\ledot

Mode                 LastWriteTime         Length Name
----                 -------------         ------ ----
la---          13/07/2022    09:49              9 MonFichier.txt
la---          13/07/2022    09:49              9 MonFichier.txt 

La différence:

Mais si on lance, par exemple, le script du dossier parent, là ça marche moins bien:

PS C:\Users\rober\OneDrive\Documents\PowerShell\2-Tests> & .\ledot\ledot.ps1
Get-Item: C:\Users\rober\OneDrive\Documents\PowerShell\2-Tests\ledot\ledot.ps1:1
Line |
   1 |  Get-Item .\MonFichier.txt
     |  ~~~~~~~~~~~~~~~~~~~~~~~~~
     | Cannot find path 'C:\Users\rober\OneDrive\Documents\PowerShell\2-Tests\MonFichier.txt' because it does
     | not exist.


    Directory: C:\Users\rober\OneDrive\Documents\PowerShell\2-Tests\ledot

Mode                 LastWriteTime         Length Name
----                 -------------         ------ ----
la---          13/07/2022    09:49              9 MonFichier.txt

Que se passe-t-il ? C’est simple, comme expliqué le .\ fait référence au dossier courant, donc 2-Tests et renvoie une erreur car il cherche le fichier .\2-Tests\MonFichier.txt qui n’existe pas.

Le $PSScriptRoot fonctionne parfaitement car il représente le dossier du script et donc la commande Get-Item fonctionne toujours.


0 commentaire

Laisser un commentaire

Avatar placeholder

Votre adresse e-mail ne sera pas publiée.