#author("2021-05-09T09:15:30+09:00","default:ryuichi","ryuichi")
#author("2021-05-09T09:16:12+09:00","default:ryuichi","ryuichi")
* 環境変数の操作 - env [#q2ef1292]
** 環境変数一覧を取得する [#o495b1b1]
Get-ChildItem env:
dir env: # エイリアス
*** システム環境変数・ユーザー環境変数それぞれの一覧を取得する [#f75381ff]
[Environment]::GetEnvironmentVariables("Machine") # システム環境変数一覧
[Environment]::GetEnvironmentVariables("User") # ユーザー環境変数一覧
[Environment]::GetEnvironmentVariables("Process") # dir env: と同等
- コマンドレットではこれに該当するものがない。
- env:で取得するのはPowerShell実行時のプロセス下の設定。
- https://stackoverflow.com/questions/30675480/windows-user-environment-variable-vs-system-environment-variable
** 環境変数を検索する [#jcc95605]
Get-ChildItem -Path env:*user*
** 環境変数を取得する [#x3331953]
Get-ChildItem env:APPDATA
*** ユーザー環境変数を取得する [#f418744d]
[Environment]::GetEnvironmentVariable("Path", "User")
** 環境変数を修正する [#e308a32d]
$env:Path += ";C:\foo\bin"
** 永続的に環境変数を修正する [#t12b2dde]
[Environment]::SetEnvironmentVariable( "foo", 123, [System.EnvironmentVariableTarget]::Machine )
[Environment]::SetEnvironmentVariable("Path", $env:Path + ";C:\bin", [EnvironmentVariableTarget]::Machine
*** %APPDATA%などの変数記法を使う場合: [#w0295ad0]
[environment]::SetEnvironmentVariable("VIM", "%APPDATA%\Vim", "User")
*** コマンドプロンプトを使う場合 [#zd24294b]
setx Path "c:\java\bin"
*** SetEnvironmentVariable()でPATHを指定するのは危険 ⚠️ [#meb10141]
*** SetEnvironmentVariable()でPATHを指定するのは危険 🚩 [#meb10141]
- SetEnvironmentVariable()で”Machine"や"User"を指定するとレジストリを変更することになるが、間違ってPATHを指定するとシステムに重大な障害が発生する
- したがって、特別な理由がない限りは使わない方がいい
** 参考 [#i90988ed]
- https://stackoverflow.com/questions/714877/setting-windows-powershell-path-variable
- https://ss64.com/ps/syntax-env.html