web-dev-qa-db-ja.com

存在しない場合、PowerShellでenv変数を設定するにはどうすればよいですか?

私はしばらくの間グーグルの後、この一般的なシナリオの答えを得られなかったことに驚いています...

環境変数が存在しない場合、PowerShellでどのように設定できますか?

22
hackjutsu

次のコードは、環境変数FOOを定義します(まだ存在しない場合)。

_if (-not (Test-Path env:FOO)) { $env:FOO = 'bar' }
_

注:この新しく定義された環境変数は、現在のプロセスとそれが作成するすべての子プロセスに対してのみ存在します(たとえば、新しいPowerShellセッションをISE)。 ありがとう、 PetSerAl

以下は主に Ansgar Wiechers によって提供され、補足は Mathias R. Jessen によって提供されました。

環境変数を定義するpersistentlyする場合は、静的 SetEnvironmentVariable()_[System.Environment]_ クラスのメソッド:

_# user environment
[Environment]::SetEnvironmentVariable('FOO', 'bar', 'User')

# system environment (requires admin privileges)
[Environment]::SetEnvironmentVariable('FOO', 'bar', 'Machine')
_

これらの定義はfutureセッション(プロセス)で有効になるため、順番にcurrentプロセスの変数を定義することに注意してください同様に、_$env:FOO = 'bar'_ さらにを実行します。これは[Environment]::SetEnvironmentVariable('FOO', 'bar', 'Process')と実質的に同じです。

[Environment]::SetEnvironmentVariable()UserまたはMachineとともに使用すると、変更を通知するために _WM_SETTINGCHANGE_ メッセージが他のアプリケーションに送信されます(そのような通知に反応するアプリケーションはほとんどありません)。
これは、Processをターゲットにするとき(または_$env:FOO_に割り当てるとき)には適用されません。他のアプリケーション(プロセス)が変数を見ることができないためです。

参照

40
mklement0