私が持っているものは、それぞれがそのことをしている機能のモジュールです。Powershell:プッシュロケーションディレクトリの範囲をどうにか操作できますか?
私が望むのは、すべての関数が呼び出されたディレクトリをスタックにプッシュして、元のコマンドを使用したディレクトリをトレースするだけでなく、失敗した場合に再び呼び出すことができるということです。
pushd
を関数本体に追加することは、関数のスタックがそのスコープ内にあるので役に立たない。私はGet-Location -Stack
の結果をグローバル変数に割り当てて、モジュール内のSet-Location
にパイプしてみましたが、それは役に立たなかったようです。
関数内のpushd
のスコープをグローバルに強制変更できる方法はありますか?あるいは私がトレースバックを作ることができる他の方法?私はパスの配列として自分のグローバルスタックを書くことができますし、私は推測するカスタム関数でそれを管理することができますが、私はここで何かを見逃す可能性がありますか?
UPDATE:機能をグローバルにpushd
その身体から定義されている場合は確かに世界的なスタックを変更しますが、機能が何らかの理由でモジュールから供給されている場合、それは動作しません。
私の知る限り、位置スタックは、グローバルおよび関数にスコープされません。それは別の方法であるという証拠はありますか? – PetSerAl
@PetSerAlそれは実際には奇妙になります。PowerShell ISEの 'pushd'を使ってスクリプトを作成して実行すると(グローバルスコープで定義された関数)、' popd'は外でうまく動作しますが、インポートされたモジュールの関数 - それはありません。スタックを定義スコープにバインドすることは、モジュールには意味をなさないが、今のところ私のように見える。 – ephemeris
あなたは正しい、@エフェメリスです。私が見ているいくつかのテストの後、ロケーションスタックのスコープは 'SessionState'になります。これはモジュールごとに異なりますが、同じモジュールの2つの関数は同じロケーションスタックを使用する必要があります。 – PetSerAl