1

現在の最上位シェルから scriptblocks/scripts を実行する必要があり、グローバル スコープを変更せずに残しておいてください。

これまでのところ、次の可能性しか考えられませんでした。

 powershell -file <script>
 powershell -noprofile -command <scriptblock>

問題は、それらが非常に遅いことです。

たとえば、次のことができるようにしたいと考えています。

mkdir newdir
cd newdir
$env:NEW_VAR = 100
ni -item f 'newfile.txt'

...私のシェルの作業ディレクトリが変更$env:NEW_VARされず、グローバルスコープに設定されないように。

これを達成するための代替手段はありますか?

4

2 に答える 2

2

他の代替案については知りません。@Peterが応答したため、環境変数はプロセスごとに保持されます。

さらに、そこに新しいディレクトリとファイルを作成すると、グローバル環境が変更されます。したがって、スクリプトは完全に無害ではありません。

あなたの場合、あなたが提案したように新しいプロセスを実行します。
あまりにも怠惰な場合は、スクリプトに配置して、try/finally にラップします。

--- script.ps1
push-location
try {
  mkdir newdir
  cd newdir
  $env:NEW_VAR = 100
  ni -item f 'newfile.txt'
} finally {
  pop-location
  # delete dir/file?
  remove-item env:NEW_VAR
}
于 2010-05-31T07:29:41.467 に答える
1

地球環境のようなものはありません。新しいプロセスを生成するとき、OS は新しいプロセスの環境のコピーを作成します。

スクリプトを別のプロセスで実行すると、終了時にすべてがそのまま残ります。

于 2010-05-30T22:30:10.973 に答える