環境変数について
概要
Windows PowerShellで Windows 環境変数にアクセスする方法について説明します。
詳細説明
環境変数には、オペレーティング システム環境に関する情報が格納されます。 この情報には、オペレーティング システム パス、オペレーティング システムで使用されるプロセッサの数、一時フォルダーの場所などの詳細が含まれます。
環境変数には、オペレーティング システムやその他のプログラムで使用されるデータが格納されます。 たとえば、WINDIR 環境変数には、Windows インストール ディレクトリの場所が含まれています。 プログラムは、この変数の値に対してクエリを実行して、Windows オペレーティング システム ファイルの場所を確認できます。
PowerShell を使用すると、レジストリに設定されている変数や、特定のセッションに対して設定された変数など、Windows 環境変数を表示および変更できます。 PowerShell 環境プロバイダーは、環境変数を簡単に表示および変更できるようにすることで、このプロセスを簡略化します。
PowerShell の他の種類の変数とは異なり、環境変数とその値は、ローカル バックグラウンド ジョブやモジュール メンバーが実行されるセッションなど、子セッションによって継承されます。 これにより、環境変数は、親セッションと子セッションの両方で必要な値を格納するのに適しています。
PowerShell 環境プロバイダー
PowerShell 環境プロバイダーを使用すると、PowerShell ドライブ (Env: ドライブ) の PowerShell で Windows 環境変数にアクセスできます。 このドライブは、ファイル システム ドライブによく似ています。 Env: ドライブに移動するには、次のように入力します。
Set-Location Env:
次に、Env: ドライブの内容を表示するには、次のように入力します。
Get-ChildItem
その他の PowerShell ドライブから Env: ドライブ内の環境変数を表示でき、Env: ドライブに移動して環境変数を表示および変更できます。
環境変数オブジェクト
PowerShell では、各環境変数は System.Collections.DictionaryEntry クラスのインスタンスである オブジェクトによって表されます。
各 DictionaryEntry オブジェクトでは、環境変数の名前はディクショナリ キーです。 変数の値はディクショナリ値です。
PowerShell で環境変数を表示するには、変数を表すオブジェクトを取得し、オブジェクト プロパティの値を表示します。 PowerShell で環境変数を変更する場合は、DictionaryEntry オブジェクトに関連付けられているメソッドを使用します。
PowerShell で環境変数を表す オブジェクトのプロパティとメソッドを表示するには、Get-Member コマンドレットを使用します。 たとえば、Env: ドライブ内のすべてのオブジェクトのメソッドとプロパティを表示するには、次のように入力します。
Get-Item -Path Env:* | Get-Member
環境変数の表示
項目名詞 (Item コマンドレット) を含むコマンドレットを使用して、環境変数の値を表示および変更できます。 環境変数には子項目がないため、Get-Item と Get-ChildItem の出力は同じです。
環境変数を参照する場合は、Env: ドライブ名の後に変数の名前を入力します。 たとえば、COMPUTERNAME 環境変数の値を表示するには、次のように入力します。
Get-ChildItem Env:Computername
すべての環境変数の値を表示するには、次のように入力します。
Get-ChildItem Env:
既定では、PowerShell は環境変数を取得する順序で表示します。 環境変数の一覧を変数名で並べ替えるには、Get-ChildItem コマンドの出力を Sort-Object コマンドレットにパイプします。 たとえば、任意の PowerShell ドライブから、次のように入力します。
Get-ChildItem Env: | Sort Name
Set-Location コマンドレットを使用して Env: ドライブに移動することもできます。
Set-Location Env:
Env: ドライブにいる場合は、パスから Env: ドライブ名を省略できます。 たとえば、すべての環境変数を表示するには、次のように入力します。
Get-ChildItem
Env: ドライブ内から COMPUTERNAME 変数の値を表示するには、次のように入力します。
Get-ChildItem ComputerName
PowerShell の式パーサーを使用して、コマンドレットを使用せずに環境変数の値を表示および変更することもできます。 環境変数の値を表示するには、次の構文を使用します。
$Env:<variable-name>
たとえば、WINDIR 環境変数の値を表示するには、PowerShell コマンド プロンプトで次のコマンドを入力します。
$Env:windir
この構文では、ドル記号 ($) は変数を示し、ドライブ名は環境変数を示します。
環境変数の変更
環境変数を永続的に変更するには、コントロール パネルの [システム] ([詳細設定] タブまたは [システムの詳細設定] 項目) を使用して、レジストリに変更を格納します。
PowerShell で環境変数を変更すると、変更は現在のセッションにのみ影響します。 この動作は、Windows ベースの環境では Set コマンド、UNIX ベースの環境では Setenv コマンドの動作に似ています。
また、変数の値を変更する権限も必要です。 十分なアクセス許可なしで値を変更しようとすると、コマンドが失敗し、PowerShell にエラーが表示されます。
コマンドレットを使用せずに変数の値を変更するには、次の構文を使用します。
$Env:<variable-name> = "<new-value>"
たとえば、";c:\temp" を Path 環境変数の値に設定するには、次の構文を使用します。
$Env:path = $env:path + ";c:\temp"
Set-Item、Remove-Item、Copy-Item などの Item コマンドレットを使用して、環境変数の値を変更することもできます。 たとえば、Set-Item コマンドレットを使用して ";c:\temp" を Path 環境変数の値に設定するには、次の構文を使用します。
Set-Item -Path Env:Path -Value ($Env:Path + ";C:\Temp")
このコマンドでは、値をかっこで囲んで単位として解釈します。
環境変数への変更の保存
すべてのWindows PowerShell セッションで環境変数の値を作成または変更するには、PowerShell プロファイルに変更を追加します。
たとえば、すべての 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"'
環境設定を格納する環境変数
PowerShell 機能では、環境変数を使用してユーザー設定を格納できます。 これらの変数はユーザー設定変数のように機能しますが、作成されるセッションの子セッションによって継承されます。 基本設定変数の詳細については、「 about_preference_variables」を参照してください。
環境設定を格納する環境変数は次のとおりです。
PSExecutionPolicyPreference
現在のセッションの実行ポリシー セットを格納します。 この環境変数は、1 つのセッションに対して実行ポリシーを設定した場合にのみ存在します。 これは、2 つの異なる方法で行うことができます。
PowerShell.exe を使用してコマンド ラインでセッションを開始し、その ExecutionPolicy パラメーターを使用してセッションの実行ポリシーを設定します。
Set-ExecutionPolicy コマンドレットを使用します。 値が "Process" である Scope パラメーターを使用します。
詳細については、「about_Execution_Policies」を参照してください。
PSModulePath
既定のモジュール ディレクトリへのパスを格納します。 モジュールへの完全なパスを指定しない場合、PowerShell は指定されたディレクトリ内のモジュールを検索します。
$Env:PSModulePath の既定値は次のとおりです。
$HOME\Documents\WindowsPowerShell\Modules; $PSHOME\Modules
PowerShell は、レジストリの "$PSHOME\Modules" の値を設定します。 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 の値を変更するには、前のコマンドを 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")
ユーザー設定へのパスを追加するには、ターゲット値を [ユーザー] に変更します。
$path = [System.Environment]::GetEnvironmentVariable("PSModulePath",
"User")
[System.Environment]::SetEnvironmentVariable("PSModulePath", $path +
";$home\Documents\Fabrikam\Modules", "User")
System.Environment クラスのメソッドの詳細については、「MSDN の 環境メソッド 」を参照してください。
値をプロファイルに変更するコマンドを追加したり、コントロール パネルの System を使用してレジストリの PSModulePath 環境変数の値を変更したりすることもできます。
詳細については、「 about_Modules」を参照してください。