ja-JP/about_Environment_Variables.help.txt
|
TOPIC about_Environment_Variables 簡単な説明 PowerShell で環境変数にアクセスし、管理する方法について説明します。 詳細な説明 環境変数には、オペレーティングシステムの環境に関する情報が格納され ています。これには、オペレーティングシステムのパス、実行プロセスの 数、ユーザープロファイルの場所などが含まれます。環境変数はメモリ上に 保持され、プログラムやプロセスがその情報を利用できます。 PowerShell では、次の 3 つの方法で環境変数にアクセスおよび管理でき ます。 - 変数構文 ($Env: ドライブ) を使う方法 - Environment プロバイダーとアイテム系コマンドレットを使う方法 - System.Environment .NET クラスを使う方法 変数構文を使う方法 環境変数は、$Env: スコープ修飾子を使って変数のように参照できます。 構文は次のとおりです。 $Env:<variable-name> たとえば、Windows ディレクトリのパスを表示するには次のようにします。 $Env:windir 環境変数の値を設定または変更するには、代入演算子 (=) を使用します。 $Env:<variable-name> = "<new-value>" 次の例では、Foo という環境変数に値を設定します。 $Env:Foo = 'An example' 既存の値に追記するには、+= 演算子を使用します。 "The 'Foo' environment variable is set to: $Env:Foo" $Env:Foo += '!' $Env:Foo 環境変数の値は常に文字列です。空文字列を設定した環境変数は存在 し続けますが、$null を設定すると変数自体が削除されます。 PS> $env:TEST = '' PS> Get-ChildItem env:TEST Name Value ---- ----- TEST PS> $env:TEST = $null PS> $env:TEST.Length 0 PS> Get-ChildItem env:TEST Get-ChildItem: Cannot find path 'TEST' because it does not exist. 注意: macOS および Linux では、環境変数の名前は大文字と小文字を 区別します。そのため $Env:Path と $Env:PATH は別の変数として扱わ れます。Windows では大文字と小文字を区別しません。 Environment プロバイダーを使う方法 PowerShell には Environment プロバイダーが含まれており、Env: ドライブを通じて環境変数をファイルシステムの項目のように操作でき ます。New-Item で新しい環境変数を作成できます。 New-Item -Path Env:\Foo -Value 'Bar' Copy-Item、Set-Item、Get-Item、Remove-Item などのコマンドレットも 使用できます。 Copy-Item -Path Env:\Foo -Destination Env:\Foo2 -PassThru Set-Item -Path Env:\Foo2 -Value 'BAR' Get-Item -Path Env:\Foo* Remove-Item -Path Env:\Foo* -Verbose すべての環境変数を一覧表示するには、次のようにします。 Get-ChildItem Env: Set-Item でも、空文字列を設定すると変数は残り、$null を設定すると 変数が削除されます。 PS> Set-Item env:TEST 'Foo' PS> Get-ChildItem env:TEST Name Value ---- ----- TEST Foo PS> Set-Item env:TEST '' PS> Get-ChildItem env:TEST Name Value ---- ----- TEST PS> Set-Item -Path env:TEST -Value $null PS> Get-ChildItem env:TEST Get-ChildItem: Cannot find path 'TEST' because it does not exist. System.Environment クラスを使う方法 .NET の System.Environment クラスのメソッドを使って、環境変数を 取得・設定できます。 [Environment]::SetEnvironmentVariable('Foo','Bar') [Environment]::GetEnvironmentVariable('Foo') SetEnvironmentVariable では、空文字列を設定すると変数は残り、 $null を設定すると変数が削除されます。 PS> [Environment]::SetEnvironmentVariable('Foo','Bar') PS> Get-ChildItem env:Foo Name Value ---- ----- Foo Bar PS> [Environment]::SetEnvironmentVariable('Foo','') PS> Get-ChildItem env:Foo Name Value ---- ----- Foo PS> [Environment]::SetEnvironmentVariable('Foo','bar') PS> Get-ChildItem env:Foo Name Value ---- ----- Foo bar PS> [Environment]::SetEnvironmentVariable('Foo',$null) PS> Get-ChildItem env:Foo Name Value ---- ----- Foo 変更のスコープと永続化 PowerShell で環境変数を変更した場合、その変更は現在のセッション にのみ影響します。これはコマンドプロンプトの set コマンドや Unix の export コマンドで設定した変数の動作に似ています。次の例は現在 のセッションでのみ有効です。 $Env:CompanyUri = 'https://internal.contoso.com' $Env:PATH += ';C:\Tools' 変更を恒久的に保持するには、次のいずれかの方法を使います。 Windows の場合: - PowerShell プロファイルに環境変数の設定を追加する。 - SetEnvironmentVariable() の第 3 引数にスコープ ('Machine' または 'User') を指定する。Machine スコープには管理者権限が 必要です。 - システムのコントロールパネルで設定する。 [Environment]::SetEnvironmentVariable('Foo', 'Bar', 'Machine') User または Machine スコープで空文字列を設定すると、その永続化 された変数が削除されます。 [Environment]::SetEnvironmentVariable('Foo', '', 'Machine') 非 Windows (macOS / Linux) の場合: - PowerShell プロファイルに設定を追加する。 - /etc/environment (Linux) や /etc/profile (macOS) などの オペレーティングシステムの初期化ファイルに定義する。 PowerShell で使用される環境変数 PowerShell は、次のような環境変数を作成・利用します。 POWERSHELL_TELEMETRY_OPTOUT POWERSHELL_DISTRIBUTION_CHANNEL POWERSHELL_UPDATECHECK PSExecutionPolicyPreference PSModulePath PSModuleAnalysisCachePath PSDisableModuleAnalysisCacheCleanup PSModuleAnalysisCachePath は、モジュール解析キャッシュの保存先を 制御します。キャッシュを無効にするには、書き込めないデバイスを 指定します。 # `NUL` here is a special device on Windows that can't be written to, # on non-Windows you would use `/dev/null` $Env:PSModuleAnalysisCachePath = 'NUL' モジュールの読み込み処理を追跡するには、Trace-Command を使用 します。 Trace-Command -PSHost -Name Modules -Expression { Import-Module Microsoft.PowerShell.Management -Force } 関連項目 about_Variables about_Scopes about_Modules about_Profiles about_Providers ---- 原文: PowerShell-Docs (CC BY 4.0) の翻訳 / PSHelpJaJP |