私はしばらくの間グーグルの後、この一般的なシナリオの答えを得られなかったことに驚いています...
環境変数が存在しない場合、PowerShellでどのように設定できますか?
次のコードは、環境変数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
_に割り当てるとき)には適用されません。他のアプリケーション(プロセス)が変数を見ることができないためです。
参照 。