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