同様の問題があり、PowerShell(フルエンドユーザーGUIアプリケーション)で記述されたプログラムを作成していて、ディスクからロードする必要のあるファイルとリソースがたくさんあるので、多くの問題を抱えていました。私の経験から、.
現在のディレクトリを表すために使用することは信頼できません。現在の作業ディレクトリを表す必要がありますが、多くの場合は表しません。PowerShellはPowerShellが内部で呼び出された場所を保存するよう.
です。より正確には、PowerShellを最初に起動すると、デフォルトではホームユーザーディレクトリ内で起動します。これは通常、次のようなユーザーアカウントのディレクトリです。C:\USERS\YOUR USER NAME
。その後、PowerShellはディレクトリを、それを呼び出したディレクトリ、または実行中のスクリプトが置かれているディレクトリに変更してから、PowerShellプロンプトを表示するか、スクリプトを実行します。しかし、これはPowerShellアプリ自体が最初にホームユーザーディレクトリ内で起動した後に発生します。
そして.
、PowerShellが起動した最初のディレクトリを表します。したがって.
、目的のディレクトリからPowerShellを呼び出した場合にのみ、現在のディレクトリを表します。後でPowerShellコードでディレクトリを変更すると、変更が.
すべての場合に内部に反映されないように見えます。.
現在の作業ディレクトリを表す場合もあれば、PowerShell(それ自体であり、スクリプトではない)が呼び出されたディレクトリを表す場合もあります。これにより、一貫性のない結果が生じる可能性があります。このため、呼び出しスクリプトを使用しています。内部にコマンドが1つあるPowerShellスクリプト:
POWERSHELL
。これにより、必要なディレクトリからPowerShellが確実に呼び出され、次のようになります。.
現在のディレクトリを表します。ただし、後でPowerShellコードでディレクトリを変更しない場合にのみ機能します。スクリプトの場合は、ファイルオプションが含まれていることを除いて、最後に説明したものと同様の呼び出しスクリプトを使用します
POWERSHELL -FILE DRIVE:\PATH\SCRIPT NAME.PS1
。これにより、PowerShellが現在の作業ディレクトリ内で確実に起動されます。
スクリプトをクリックするだけで、スクリプトの場所に関係なく、ホームユーザーディレクトリからPowerShellが呼び出されます。その結果、現在の作業ディレクトリはスクリプトが配置されているディレクトリですが、PowerShell呼び出しディレクトリはC:\USERS\YOUR USER NAME
であり.
、状況に応じてこれら2つのディレクトリのいずれかを返すというのは、おかしいことです。
しかし、この大騒ぎを回避し、呼び出しスクリプトを使用するために、現在の作業ディレクトリまたはスクリプトが呼び出されたディレクトリを表す天候に応じて、現在のディレクトリを表すために、$PWD
または$PSSCRIPTROOT
代わりに単に使用でき.
ます。そして、何らかの理由で、2つのディレクトリのうち他のディレクトリを取得したい.
場合は、を使用できます$HOME
。
個人的には、PowerShellで開発したアプリのルートディレクトリ内に、メインアプリスクリプトを呼び出す起動スクリプトがあり、アプリのソースコード内の現在の作業ディレクトリを決して変更しないことを覚えているので、これについて心配する必要はありません。を使用.
して、現在のディレクトリを表し、アプリケーションで相対ファイルのアドレス指定を問題なくサポートできます。これは、PowerShellの新しいバージョン(バージョン2より新しい)で動作するはずです。