Ich hatte ähnliche Probleme und es machte mir große Probleme, da ich in PowerShell geschriebene Programme (GUI-Anwendungen für Endbenutzer) erstelle und viele Dateien und Ressourcen habe, die ich von der Festplatte laden muss. Aus meiner Erfahrung mit . Danach wechselt PowerShell das Verzeichnis entweder in das Verzeichnis, aus dem Sie es aufgerufen haben, oder in das Verzeichnis, in dem sich das von Ihnen ausgeführte Skript befindet, bevor Sie entweder die PowerShell-Eingabeaufforderung erhalten oder das Skript ausführen. Dies geschieht jedoch, nachdem die PowerShell-App ursprünglich in Ihrem privaten Benutzerverzeichnis gestartet wurde..
zur Darstellung des aktuellen Verzeichnisses unzuverlässig. Es sollte das aktuelle Arbeitsverzeichnis darstellen, ist es aber häufig nicht. Es scheint, dass PowerShell den Speicherort speichert, von dem aus PowerShell aufgerufen wurde .
. Genauer gesagt wird PowerShell beim ersten Start standardmäßig in Ihrem Home-Benutzerverzeichnis gestartet. Das ist normalerweise das Verzeichnis Ihres BenutzerkontosC:\USERS\YOUR USER NAME
Und .
repräsentiert das ursprüngliche Verzeichnis, in dem PowerShell gestartet wurde. Stellt also .
nur das aktuelle Verzeichnis dar, wenn Sie PowerShell aus dem gewünschten Verzeichnis aufgerufen haben. Wenn Sie später das Verzeichnis im PowerShell-Code ändern, scheint sich die Änderung nicht .
in jedem Fall darin zu widerspiegeln . In einigen Fällen handelt es sich .
um das aktuelle Arbeitsverzeichnis, in anderen um das Verzeichnis, aus dem PowerShell (selbst, nicht das Skript) aufgerufen wurde, was zu inkonsistenten Ergebnissen führen kann. Aus diesem Grund verwende ich ein Invoker-Skript. PowerShell-Skript mit einem einzigen Befehl :
POWERSHELL
. Dadurch wird sichergestellt, dass PowerShell aus dem gewünschten Verzeichnis aufgerufen wird und somit make.
aktuelles Verzeichnis darstellen. Dies funktioniert jedoch nur, wenn Sie das Verzeichnis später im PowerShell-Code nicht ändern. Im Falle eines Skripts verwende ich ein Aufruferskript, das dem zuletzt erwähnten ähnlich ist, außer dass es eine Dateioption enthält :
POWERSHELL -FILE DRIVE:\PATH\SCRIPT NAME.PS1
. Dadurch wird sichergestellt, dass PowerShell im aktuellen Arbeitsverzeichnis gestartet wird.
Durch einfaches Klicken auf das Skript wird PowerShell aus Ihrem privaten Benutzerverzeichnis aufgerufen, unabhängig davon, wo sich das Skript befindet. Dies führt dazu, dass das aktuelle Arbeitsverzeichnis das Verzeichnis ist, in dem sich das Skript befindet, das PowerShell-Aufrufverzeichnis jedoch C:\USERS\YOUR USER NAME
, und dass .
je nach Situation eines dieser beiden Verzeichnisse zurückgegeben wird, was lächerlich ist.
Um all diese Aufregung zu vermeiden und das Aufruferskript zu verwenden, können Sie einfach entweder $PWD
oder $PSSCRIPTROOT
anstelle des .
aktuellen Verzeichnisses verwenden, je nachdem, ob Sie das aktuelle Arbeitsverzeichnis oder das Verzeichnis darstellen möchten, aus dem das Skript aufgerufen wurde. Und wenn Sie aus irgendeinem Grund ein anderes von zwei zurückgegebenen Verzeichnissen abrufen möchten .
, können Sie verwenden $HOME
.
Ich persönlich habe nur ein Aufruferskript im Stammverzeichnis meiner Apps, die ich mit PowerShell entwickelt habe und das mein Haupt-App-Skript aufruft, und denke einfach daran, niemals das aktuelle Arbeitsverzeichnis in meinem Quellcode meiner App zu ändern, damit ich mir darüber keine Sorgen machen muss. und ich kann verwenden .
, um das aktuelle Verzeichnis darzustellen und die relative Dateiadressierung in meinen Anwendungen ohne Probleme zu unterstützen. Dies sollte in neueren Versionen von PowerShell (neuer als Version 2) funktionieren.