165 votes

PowerShell : Exécuter une commande depuis le répertoire de script.

J'ai un script PowerShell qui fait certaines choses en utilisant le répertoire courant du script. Ainsi, à l'intérieur de ce répertoire, l'exécution de .\script.ps1 fonctionne correctement.

Maintenant je veux appeler ce script à partir d'un répertoire différent sans changer le répertoire de référencement du script. Je veux donc appeler ..\..\dir\script.ps1 tout en voulant que ce script se comporte comme s'il était appelé depuis son répertoire.

Comment faire, ou comment modifier un script pour qu'il puisse être exécuté depuis n'importe quel répertoire ?

3voto

sashoalm Points 10403

J'ai fait une phrase à partir de la solution de @JohnL :

$MyInvocation.MyCommand.Path | Split-Path | Push-Location

2voto

IGRACH Points 154

Eh bien, j'ai cherché une solution pour cela pendant un certain temps, sans aucun script, juste à partir du CLI. C'est comme ça que je le fais xD :

  • Naviguez vers le dossier à partir duquel vous voulez exécuter le script (l'important est que vous ayez des compléments de tabulation).

    ..\..\dir

  • Entourez maintenant l'emplacement de guillemets doubles, et à l'intérieur de ceux-ci ajoutez cd pour que nous puissions invoquer une autre instance de powershell.

    "cd ..\..\dir"

  • Ajouter une autre commande pour exécuter script séparée par ; Avec est un séparateur de commande dans powershell.

    "cd ..\..\dir\; script.ps1"

  • Enfin, exécutez-le avec une autre instance de powershell

    start powershell "cd..\..\dir\; script.ps1"

Cela ouvrira une nouvelle fenêtre powershell, allez à ..\..\dir courir script.ps1 et fermer la fenêtre.


Notez que " ;" sépare simplement les commandes, comme si vous les aviez tapées une par une, si la première échoue, la seconde s'exécutera, puis la suivante, puis la suivante... Si vous voulez garder une nouvelle fenêtre powershell ouverte, ajoutez -noexit dans la commande passée. Notez que j'ai d'abord navigué vers le dossier désiré afin de pouvoir utiliser les compléments de tabulation (vous ne pouvez pas le faire entre guillemets).

start powershell "-noexit cd..\..\dir\; script.ps1"

Utilisez les guillemets "" ainsi vous pourriez passer des répertoires avec des espaces dans les noms, par exemple,

start powershell "-noexit cd '..\..\my dir'; script.ps1"

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X