about_Environment_Variables

適用対象: Windows PowerShell 2.0, Windows PowerShell 3.0, Windows PowerShell 4.0, Windows PowerShell 5.0

トピック

about_Environment_Variables

簡単な説明

Windows PowerShell® で Windows 環境変数にアクセスする方法について説明します。

詳細な説明

環境変数には、オペレーティング システムの環境についての情報が格納されます。この情報には、オペレーティング システムのパス、オペレーティング システムによって使用されているプロセッサの数、一時フォルダーの場所などの詳細情報が含まれます。

環境変数に格納されているデータは、オペレーティング システムやその他のプログラムによって使用されます。たとえば、環境変数 WINDIR には、Windows がインストールされているディレクトリの場所の情報が含まれています。プログラムはこの変数の値を照会し、Windows のオペレーティング システム ファイルがある場所を判断できます。

Windows PowerShell では、レジストリに設定した変数および特定のセッション用に設定された変数などの Windows 環境変数を、表示したり変更したりできます。Windows PowerShell 環境プロバイダーを使用すると、環境変数の表示および変更が容易になり、このプロセスが簡略化されます。

Windows PowerShell の他の種類の変数とは異なり、環境変数とその値は、モジュールのメンバーが実行するローカルのバックグランド ジョブおよびセッションなどの子セッションに継承されます。そのため、環境変数は親セッションと子セッションの両方に必要な値の格納に適しています。

WINDOWS POWERSHELL の環境プロバイダー

Windows PowerShell の環境プロバイダーを使用すると、Windows PowerShell で Windows PowerShell ドライブ (Env: ドライブ) の Windows 環境変数にアクセスできます。このドライブは、ファイル システム ドライブと同じように表示されます。Env: ドライブに移動するには、次のように入力します。

  Set-Location Env:

次に、Env: ドライブの内容を表示するには、次のように入力します。

  Get-ChildItem

Env: ドライブの環境変数は、その他の任意の Windows PowerShell ドライブから参照できます。また、Env: ドライブに移動して、環境変数の表示や変更ができます。

環境変数オブジェクト

Windows PowerShell では、各環境変数が System.Collections.DictionaryEntry クラスのインスタンスであるオブジェクトによって表されます。

各 DictionaryEntry オブジェクトでは、環境変数の名前はディクショナリ キーです。環境変数の値はディクショナリ値です。

Windows PowerShell の環境変数を表示するには、環境変数を表すオブジェクトを取得してから、オブジェクト プロパティの値を表示します。Windows PowerShell の環境変数を変更するときは、DictionaryEntry オブジェクトに関連付けられているメソッドを使用します。

Windows PowerShell で環境変数を表すオブジェクトのプロパティとメソッドを表示するには、Get-Member コマンドレットを使用します。たとえば、Env: ドライブにあるすべてのオブジェクトのメソッドとプロパティを表示するには、次のように入力します。

  Get-Item -Path Env:* | Get-Member

環境変数の表示

名詞 Item を含むコマンドレット (Item コマンドレット) を使用して、環境変数の値の表示および変更を行うことができます。環境変数には子の項目がないため、Get-Item と Get-ChildItem の出力は同じです。

環境変数を参照するときは、Env: ドライブ名の後に続けて環境変数の名前を入力します。たとえば、COMPUTERNAME 環境変数の値を表示するには、次のコマンドを入力します。

  Get-Childitem Env:Computername

すべての環境変数の値を表示するには、次のコマンドを入力します。

  Get-ChildItem Env:

既定では、Windows PowerShell では環境変数は取得された順序で表示されます。環境変数の一覧を変数名の順に並べ替えるには、Get-ChildItem コマンドの出力を Sort-Object コマンドレットにパイプします。たとえば、任意の Windows PowerShell ドライブから、次のコマンドを入力します。

  Get-ChildItem Env: | Sort Name

Set-Location コマンドレットを使用して、Env: ドライブに移動することもできます。

  Set-Location Env:

Env: ドライブから使用する場合は、パス内の Env: ドライブ名を省略できます。たとえば、すべての環境変数を表示するには、次のコマンドを入力します。

  Get-ChildItem

Env: ドライブ内から COMPUTERNAME 変数の値を表示するには、次のように入力します。

  Get-ChildItem ComputerName

また、Windows PowerShell の式パーサーを使用すると、コマンドレットを使用せずに環境変数の値を表示および変更できます。環境変数の値を表示するには、次の構文を使用します。

  $Env:<variable-name>

たとえば、WINDIR 環境変数の値を表示するには、Windows PowerShell コマンドプロンプトで次のコマンドを入力します。

  $Env:windir

この構文では、ドル記号 ($) は変数を示し、ドライブ名は環境変数を示しています。

環境変数の変更

環境変数に対する変更を保持するには、コントロールパネルの "システム" ( [詳細設定] タブまたは [システムの詳細設定] 項目) を使用して、レジストリに変更を格納します。

Windows PowerShell の環境変数を変更した場合、その変更は現在のセッションのみに影響します。この動作は、Windows ベース環境での Set コマンドおよび UNIX ベース環境での Setenv コマンドの動作に似ています。

また、変数の値を変更するには、アクセス許可も必要です。適切なアクセス許可なしに値を変更しようとすると、コマンドが失敗して Windows PowerShell はエラーを表示します。

次の構文を使用すると、コマンドレットを使用せずに変数の値を変更できます。

          $Env:<variable-name> = "<new-value>"

たとえば、Path 環境変数の値に ";c:\temp" を追加するには、次の構文を使用します。

  $Env:path = $env:path + ";c:\temp"

また、Set-Item、Remove-Item、Copy-Item などの Item コマンドレットを使用して、環境変数の値の変更を行うこともできます。たとえば、Set-Item コマンドレットを使用して、Path 環境変数の値に ";c:\temp" を追加するには、次の構文を使用します。

          Set-Item -Path Env:Path -Value ($Env:Path + ";C:\Temp")

このコマンドでは値がかっこで囲まれているため、1 つの単位として解釈されます。

環境変数の変更の保存

すべての Windows PowerShell セッションで環境変数の値を作成または変更するには、Windows PowerShell プロファイルに変更を追加します。

たとえば、すべての Windows PowerShell セッションで、C:\Temp ディレクトリを Path 環境変数に追加するには、Windows PowerShell プロファイルに次のコマンドを追加します。

  $Env:Path = $Env:Path + ";C:\Temp"

CurrentUser、AllHosts プロファイルなど、既存のプロファイルにコマンドを追加するには、次のように入力します。

  Add-Content -Path $Profile.CurrentUserAllHosts -Value '$Env:Path = $Env:Path + ";C:\Temp"'

設定を格納する環境変数

Windows PowerShell の機能を用いて、環境変数を使用してユーザー設定を格納することができます。これらの変数はユーザー設定変数のように機能しますが、変数が作成されたセッションの子セッションに継承されます。ユーザー設定変数の詳細については、about_preference_variables を参照してください。

設定を格納する環境変数には次のようなものがあります。

PSEXECUTIONPOLICYPREFERENCE

現在のセッションの実行ポリシー セットを格納します。この環境変数は、単一セッションに対して実行ポリシーを設定した場合にだけ存在します。これは 2 つの異なる方法で実行できます。

-- PowerShell.exe を用いてコマンドラインからセッションを開始し、その ExecutionPolicy パラメーターを用いてセッションの実行ポリシーを設定する。

-- Set-ExecutionPolicy コマンドレットを使用する。値を「Process」として Scope パラメーターを使用する。

詳細については、about_Execution_Policies を参照してください。

PSMODULEPATH

既定のモジュール ディレクトリへのパスを格納します。モジュールに対する完全なパスを指定しない場合、Windows PowerShell は指定されているディレクトリにあるモジュールを探します。

$env:PSModulePath の既定値は、次のとおりです。

                $home\Documents\WindowsPowerShell\Modules; $pshome\Modules

Windows PowerShell は、"$pshome\Modules" の値をレジストリに設定します。Windows PowerShell を起動するごとに "$home\Documents\WindowsPowerShell\Modules" の値が設定されます。

また、Program Files ディレクトリなど、その他のディレクトリにモジュールをインストールするセットアップ プログラムは、PSModulePath の値にインストール場所を追加する場合があります。

現在のセッションの既定のモジュールのディレクトリを変更するには、次のコマンド形式を用いて PSModulePath 環境変数の値を変更します。

たとえば、PSModulePath 環境変数の値に "C:\Program Files\Fabrikam\Modules" ディレクトリを追加するには、次のコマンドを入力します。

                $Env:PSModulePath = $Env:PSModulePath + ";C:\Program Files\Fabrikam\Modules"

コマンドのセミコロン (;) は、列挙されている新しいパスとその直前のパスとを区切ります。

すべてのセッションにおける PSModulePath の値を変更するには、上記コマンドを Windows PowerShell プロファイルに追加するか、または Environment クラスの SetEnvironmentVariable メソッドを使用します。

次のコマンドは GetEnvironmentVariable メソッドを用いて PSModulePath のコンピューター設定を取得し、また、SetEnvironmentVariable メソッドを用いて値にパス C:\Program Files\Fabrikam\Modules を追加します。

$path = [System.Environment]::GetEnvironmentVariable("PSModulePath", "Machine")
            [System.Environment]::SetEnvironmentVariable("PSModulePath", $path + `
               ";C:\Program Files\Fabrikam\Modules", "Machine")

ユーザー設定にパスを追加するには、ターゲットの値を User に変更します。

            $path = [System.Environment]::GetEnvironmentVariable("PSModulePath", "User")
            [System.Environment]::SetEnvironmentVariable("PSModulePath", $path + `
               ";$home\Documents\Fabrikam\Modules", "User")

System.Environment クラスのメソッドの詳細については、MSDN の「Environment メソッド」 (https://go.microsoft.com/fwlink/?LinkId=242783) を参照してください。

PSModulePath 環境変数のレジストリにおける値を変更するには、プロファイルの値を変更するコマンドを追加するか、またはコントロールパネルの [システム] タブを使用して変更することができます。

詳細については、about_Modules を参照してください。

関連項目

Environment (provider)

about_Modules