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