169

Linux では、次のことができます。

$ FOO=BAR ./myscript

環境変数 FOO を設定して「myscript」を呼び出します。

PowerShell で同様のことが可能ですか?つまり、最初に変数を設定し、コマンドを呼び出してから、変数を再度設定解除する必要はありませんか?

私のユースケースをより明確にするために、これをスクリプトの一部として使用したくありません。むしろ、環境変数を使用して動作を制御できるサードパーティのスクリプトがありますが、この場合はコマンド ライン引数では制御できません。したがって、タイピングを交互に行うことができます

$ OPTION=1 ./myscript

$ ./myscript

非常に便利です。

4

8 に答える 8

96

一般に、グローバル (環境) 変数ではなく、パラメーターを介してスクリプトに情報を渡す方が適切です。しかし、それが必要な場合は、次の方法で実行できます。

$env:FOO = 'BAR'; ./myscript

環境変数 $env:FOO は、次のように後で削除できます。

Remove-Item Env:\FOO
于 2009-09-14T14:56:05.743 に答える
6

Unix 構文と同等のものを実現するには、環境変数を設定するだけでなく、コマンドの実行後に以前の値にリセットする必要があります。次のような関数を PowerShell プロファイルに追加することで、よく使用するコマンドでこれを実現しました。

function cmd_special()
{
  $orig_master = $env:app_master
  $env:app_master = 'http://host.example.com'
  mycmd $args
  $env:app_master = $orig_master
}

環境変数mycmdの値に応じて動作が異なる実行可能ファイルも同様ですapp_master。を定義することで、環境変数を設定してコマンド ライン (他のパラメーターを含む) からcmd_special実行できるようになりました...そして、コマンドの実行後にリセット (または設定解除) されます。cmd_specialapp_master

おそらく、1 回の呼び出しでこのアドホックを実行することもできます。

& { $orig_master = $env:appmaster; $env:app_master = 'http://host.example.com'; mycmd $args; $env:app_master = $orig_master }

これよりも簡単なはずですが、これは PowerShell ですぐにサポートされるユースケースではないようです。おそらく、将来のバージョン (またはサードパーティの機能) で、このユースケースが容易になるでしょう。PowerShell にこれを行うコマンドレットがあればいいのですが、たとえば次のようになります。

with-env app_master='http://host.example.com' mycmd

おそらく、PowerShell の第一人者は、そのようなコマンドレットを作成する方法を提案できます。

于 2011-01-20T15:55:06.557 に答える
-6

変数のスコープを関数とスクリプトに設定できます。

$script:foo = "foo"
$foo
$function:functionVariable = "v"
$functionVariable

New-Variableには、正式になり、new-variableを使用して変数を宣言する場合は、-scopeパラメーターもあります。

于 2009-09-14T14:41:35.087 に答える