J'ai eu des problèmes similaires et cela m'a posé beaucoup de problèmes car je crée des programmes écrits en PowerShell (applications GUI utilisateur final) et j'ai beaucoup de fichiers et de ressources à charger à partir du disque. D'après mon expérience, en utilisant . Après cela, PowerShell change de répertoire soit en répertoire à partir duquel vous l'avez appelé, soit en répertoire où se trouve le script que vous exécutez avant de vous présenter l'invite PowerShell ou d'exécuter le script. Mais cela se produit une fois que l'application PowerShell elle-même a commencé à l'origine dans votre répertoire utilisateur personnel..
pour représenter le répertoire actuel n'est pas fiable. Il devrait représenter le répertoire de travail actuel, mais ce n'est souvent pas le cas. Il semble que PowerShell enregistre l'emplacement à partir duquel PowerShell a été appelé à l'intérieur .
. Pour être plus précis, lorsque PowerShell est démarré pour la première fois, il démarre, par défaut, dans votre répertoire utilisateur personnel. Il s'agit généralement du répertoire de votre compte utilisateur, quelque chose commeC:\USERS\YOUR USER NAME
Et .
représente le répertoire initial dans lequel PowerShell a démarré. .
Représente donc uniquement le répertoire courant au cas où vous auriez appelé PowerShell à partir du répertoire voulu. Si vous modifiez ultérieurement le répertoire dans le code PowerShell, le changement ne semble pas être reflété à l'intérieur .
dans tous les cas. Dans certains cas, .
représente le répertoire de travail actuel et dans d'autres, le répertoire à partir duquel PowerShell (lui-même et non le script) a été appelé, ce qui peut conduire à des résultats incohérents. Pour cette raison, j'utilise un script d'invocateur. De script PowerShell avec commande unique à l' intérieur:
POWERSHELL
. Cela garantira que PowerShell est invoqué à partir du répertoire voulu et fera ainsi.
représente le répertoire courant. Mais cela ne fonctionne que si vous ne changez pas de répertoire ultérieurement dans le code PowerShell. Dans le cas d'un script, j'utilise script invocateur qui est semblable à dernier je l' ai mentionné, sauf qu'il contient une option de fichier:
POWERSHELL -FILE DRIVE:\PATH\SCRIPT NAME.PS1
. Cela garantit que PowerShell est démarré dans le répertoire de travail actuel.
Un simple clic sur le script appelle PowerShell à partir de votre répertoire d’utilisateurs personnels, quel que soit l’emplacement du script. Il en résulte que le répertoire de travail actuel est le répertoire où se trouve le script, mais que le répertoire d'invocation PowerShell est C:\USERS\YOUR USER NAME
, et avec le .
retour de l'un de ces deux répertoires en fonction de la situation, ce qui est ridicule.
Mais pour éviter toute cette agitation et utiliser le script invocateur, vous pouvez simplement utiliser soit $PWD
ou $PSSCRIPTROOT
au lieu de .
pour représenter le répertoire actuel en fonction de la météo que vous souhaitez représenter le répertoire de travail actuel ou le répertoire à partir duquel le script a été invoqué. Et si vous, pour une raison quelconque, souhaitez récupérer un autre des deux répertoires qui .
retourne, vous pouvez utiliser $HOME
.
Personnellement, je n'ai qu'un script d'invocateur dans le répertoire racine de mes applications que je développe avec PowerShell qui invoque mon script d'application principal, et n'oubliez pas de ne jamais changer le répertoire de travail actuel dans le code source de mon application, donc je n'ai jamais à m'en soucier, et je peux utiliser .
pour représenter le répertoire actuel et prendre en charge l'adressage de fichiers relatif dans mes applications sans aucun problème. Cela devrait fonctionner dans les versions plus récentes de PowerShell (plus récentes que la version 2).