about_Environment_Variables
簡単な説明
PowerShell で環境変数にアクセスして管理する方法について説明します。
環境変数には、オペレーティング システムやその他のプログラムによって使用されるデータが格納されます。 PowerShell では、次の環境変数が作成されます。
- P Standard Edition xecutionPolicyPreference
- PSModulePath
- PSModuleAnalysisCachePath
- PSDisableModuleAnalysisCacheCleanup
これらの変数の詳細については、この記事の PowerShell 環境変数 を参照してください。
詳細な説明
PowerShell は、サポートされているオペレーティング システム プラットフォームの環境変数にアクセスして管理できます。 PowerShell 環境プロバイダーを使用すると、現在のコンソールで環境変数を取得、追加、変更、クリア、および削除できます。
PowerShell の他の種類の変数とは異なり、環境変数は常に文字列として格納されます。 また、他の変数とは異なり、ローカル バックグラウンド ジョブやモジュール メンバーが実行されるセッションなど、子プロセスによって継承されます。 これにより、環境変数は、親プロセスと子プロセスの両方で必要な値を格納するのに適しています。
Windows では、環境変数は次の 3 つのスコープで定義できます。
- マシン (またはシステム) のスコープ
- ユーザー スコープ
- プロセスのスコープ
プロセス スコープには、現在のプロセスまたは PowerShell セッションで使用できる環境変数が含まれています。 この変数の一覧は親プロセスから継承され、Machine スコープと User スコープ内の変数から構築されます。
PowerShell で環境変数を変更すると、変更は現在のセッションにのみ影響します。 この動作は、Windows コマンド シェルでのコマンドの set
動作と UNIX ベースの setenv
環境でのコマンドに似ています。 マシンスコープまたはユーザースコープの値を変更するには、System.Environment クラスのメソッドを使用する必要があります。
マシン スコープ変数を変更するには、アクセス許可も必要です。 十分なアクセス許可なしで値を変更しようとすると、コマンドが失敗し、PowerShell にエラーが表示されます。
PowerShell には、環境変数を使用および管理するためのさまざまな方法が用意されています。
- 変数の構文
- 環境プロバイダーと項目コマンドレット
- .NET System.Environment クラス
変数構文を使用する
環境変数の値を表示および変更するには、次の構文を使用します。
$Env:<variable-name>
たとえば、環境変数の値を表示するには、次のようにします WINDIR
。
$Env:windir
C:\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
The 'Foo' environment variable is set to: An example
An example!
PowerShell では、環境変数を空の文字列に設定することはできません。 環境変数を設定するか $null
、空の文字列を設定すると、現在のセッションから削除されます。 次に例を示します。
$Env:Foo = ''
$Env:Foo | Get-Member -MemberType Properties
Get-Member : You must specify an object for the Get-Member cmdlet.
At line:1 char:12
+ $env:foo | Get-Member
+ ~~~~~~~~~~
+ CategoryInfo : CloseError: (:) [Get-Member], InvalidOperationException
+ FullyQualifiedErrorId : NoObjectInGetMember,Microsoft.PowerShell.Commands.GetMemberCommand
Get-Member
環境変数が削除されたため、エラーが返されました。
空の文字列で使用すると、エラーが返されないことがわかります。
'' | Get-Member -MemberType Properties
TypeName: System.String
Name MemberType Definition
---- ---------- ----------
Length Property int Length {get;}
PowerShell の変数の詳細については、「about_Variables」を参照してください。
環境プロバイダーと項目コマンドレットを使用する
PowerShell の 環境 プロバイダーは、ファイル システム ドライブに似た形式で環境変数を操作するためのインターフェイスを提供します。 PowerShell で環境変数と値を取得、追加、変更、クリア、削除できます。
たとえば、次の値Bar
をFoo
持つ環境変数を作成します。
New-Item -Path Env:\Foo -Value 'Bar'
Name Value
---- -----
Foo 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
Name Value
---- -----
Foo2 Bar
Name Value
---- -----
Foo2 BAR
Foo Bar
VERBOSE: Performing the operation "Remove Item" on target "Item: Foo2".
VERBOSE: Performing the operation "Remove Item" on target "Item: Foo".
コマンドレットを Get-ChildItem
使用して、環境変数の完全な一覧を表示します。
Get-ChildItem Env:
環境プロバイダーを使用して環境変数を管理する方法の詳細については、about_Environment_Providerを参照してください。
System.Environment メソッドを使用する
System.Environment クラスには、環境変数をGetEnvironmentVariable()
取得およびSetEnvironmentVariable()
変更するためのメソッドとメソッドが用意されています。
次の例では、値を持つ新しい環境変数を作成し、 Foo
その値 Bar
を返します。
[Environment]::SetEnvironmentVariable('Foo','Bar')
[Environment]::GetEnvironmentVariable('Foo')
Bar
このメソッドを使用 SetEnvironmentVariable()
して環境変数を削除するには、変数の値に空の文字列を指定します。 たとえば、環境変数を削除するには、次のようにします Foo
。
[Environment]::SetEnvironmentVariable('Foo','')
[Environment]::GetEnvironmentVariable('Foo')
System.Environment クラスのメソッドの詳細については、「環境メソッド」を参照してください。
Windows で永続的な環境変数を作成する
Windows では、環境変数に永続的な変更を行う 3 つの方法があります。
- プロファイルで設定する
- メソッドの
SetEnvironmentVariable()
使用 - システム コントロール パネルを使用する
プロファイルで環境変数を設定する
PowerShell プロファイルで追加または変更した環境変数は、プロファイルを読み込む任意のセッションで使用できます。 このメソッドは、サポートされている任意のプラットフォーム上の任意のバージョンの PowerShell に対して機能します。
たとえば、環境変数を CompanyUri
作成し、環境変数を Path
更新してフォルダーを含めるには C:\Tools
、PowerShell プロファイルに次の行を追加します。
$Env:CompanyUri = 'https://internal.contoso.com'
$Env:Path += ';C:\Tools'
自動変数を使用して、PowerShell プロファイルへのパスを $PROFILE
取得できます。 プロファイルの詳細については、about_Profilesを参照してください。
SetEnvironmentVariable() を使用して環境変数を設定する
Windows では、メソッドのスコープを SetEnvironmentVariable()
3 番目のパラメーターとして指定して、そのスコープに環境変数を設定できます。 マシンスコープとユーザースコープの両方が現在のプロセスの外部で保持されるため、新しい環境変数または変更された環境変数を保存できます。
たとえば、値Bar
を持つ新しい環境変数Foo
をマシン スコープに保存するには、次のようにします。
[Environment]::SetEnvironmentVariable('Foo', 'Bar', 'Machine')
変数の値を空の文字列に設定することで、ユーザースコープまたはマシンスコープから環境変数を削除できます。
[Environment]::SetEnvironmentVariable('Foo', '', 'Machine')
システム コントロール パネルで環境変数を設定する
システム コントロール パネルでは、ユーザースコープとシステム (マシン) スコープで既存の環境変数を追加または編集できます。 Windows は、セッションとシステムの再起動間で保持されるように、これらの値をレジストリに書き込みます。
システム コントロール パネルを使用して Windows 上の環境変数に永続的な変更を行うには:
- システム コントロール パネルを開きます。
- システムを選択します。
- [システム 設定の詳細設定] を選択します。
- [詳細設定] タブに移動します。
- 環境変数の選択 ....
- 変更を行います。
PowerShell 環境変数
PowerShell 機能では、環境変数を使用してユーザー設定を格納できます。 これらの変数は基本設定変数と同様に機能しますが、作成されるセッションの子セッションによって継承されます。 基本設定変数の詳細については、about_Preference_Variablesを参照してください。
環境設定を格納する環境変数は次のとおりです。
P Standard Edition xecutionPolicyPreference
現在のセッションの実行ポリシー セットを格納します。 この環境変数は、1 つのセッションに対して実行ポリシーを設定した場合にのみ存在します。 これは、2 つの異なる方法で行うことができます。
ExecutionPolicy パラメーターを使用してコマンド ラインからセッションを開始し、セッションの実行ポリシーを設定します。
Set-ExecutionPolicy
コマンドレットを使用します。 値を指定して Scope パラメーターをProcess
使用します。環境変数を手動で設定します。 この変数の値を変更すると、現在のプロセスの実行ポリシーが変更されます。
この情報は、Windows プラットフォームにのみ適用されます。 詳細については、「about_Execution_Policies」を参照してください。
PSModulePath
環境変数には
$env:PSModulePath
、モジュールとリソースを検索するために検索されるフォルダーの場所の一覧が含まれています。既定では、割り当てられる
$env:PSModulePath
有効な場所は次のとおりです。システム全体の場所: これらのフォルダーには、PowerShell に付属するモジュールが含まれています。 モジュールは場所に
$PSHOME\Modules
格納されます。 また、これは Windows 管理モジュールがインストールされている場所です。ユーザーがインストールしたモジュール: ユーザーがインストールするモジュールです。
Install-Module
には、現在の ユーザーまたはすべてのユーザーにモジュールをインストールするかどうかを指定できる Scope パラメーターがあります。 詳細については、「Install-Module」を参照してください。- Windows では、ユーザー固有 の CurrentUser スコープの場所はフォルダーです
$HOME\Documents\PowerShell\Modules
。 AllUsers スコープの場所は$env:ProgramFiles\PowerShell\Modules
.
- Windows では、ユーザー固有 の CurrentUser スコープの場所はフォルダーです
さらに、Program Files ディレクトリなどの他のディレクトリにモジュールをインストールするプログラムをセットアップすると、その場所を
$env:PSModulePath
.詳細については、「about_PSModulePath」を参照してください。
PSModuleAnalysisCachePath
PowerShell では、モジュールとそのコマンドレットに関するデータをキャッシュするために使用されるファイルを制御できます。 キャッシュは起動時にコマンドの検索中に読み取られ、モジュールのインポート後にバックグラウンド スレッドに書き込まれます。
キャッシュの既定の場所は次のとおりです。
$env:LOCALAPPDATA\Microsoft\Windows\PowerShell
キャッシュの既定のファイル名は
ModuleAnalysisCache
.Note
コマンド検出が正しく機能しない場合 (たとえば、IntelliSense に存在しないコマンドが表示されている場合)、キャッシュ ファイルを削除できます。 キャッシュは、次に PowerShell を起動するときに再作成されます。
キャッシュの既定の場所を変更するには、PowerShell を開始する前に、環境変数 を設定します。 値には、PowerShell がファイルの作成および書き込みアクセス許可を持つ完全なパス (ファイル名を含む) を指定する必要があります。
この環境変数の変更は、子プロセスにのみ影響します。 永続的な環境変数の作成については、前のセクションを参照してください。
ファイル キャッシュを無効にするには、たとえば次のような無効な場所をこの値に設定します。
# `NUL` here is a special device on Windows that can't be written to $env:PSModuleAnalysisCachePath = 'NUL'
これにより、NUL デバイスへのパスが設定されます。 PowerShell はパスに書き込めず、エラーは返されません。 トレーサーを使用して報告されたエラーを確認できます。
Trace-Command -PSHost -Name Modules -Expression { Import-Module Microsoft.PowerShell.Management -Force }
PSDisableModuleAnalysisCacheCleanup
モジュール分析キャッシュを書き出すとき、PowerShell は不要な大きなキャッシュを回避するために、存在しなくなったモジュールをチェックします。 これらのチェックが望ましくない場合があります。その場合は、この環境変数の値を > に
1
設定して無効にすることができます。この環境変数の設定は、現在のプロセスの後続のクリーンup イベントに有効になります。 起動時に クリーンup が無効になっていることを確認するには、PowerShell を開始する前に環境変数を設定する必要があります。 永続的な環境変数の作成については、前のセクションを参照してください。
PowerShell で使用されるその他の環境変数
パス情報
PATH
環境変数には
$env:PATH
、オペレーティング システムが実行可能ファイルを検索するフォルダーの場所の一覧が含まれています。 Windows では、フォルダーの場所の一覧はセミコロン (;
) 文字で区切られます。PATHEXT
この
$env:PATHEXT
変数には、Windows が実行可能ファイルと見なすファイル拡張子の一覧が含まれています。 表示されている拡張機能のいずれかを含むスクリプト ファイルが PowerShell から実行されると、スクリプトは現在のコンソールまたはターミナル セッションで実行されます。 ファイル拡張子が一覧にない場合、スクリプトは新しいコンソール セッションで実行されます。別のスクリプト言語のスクリプトが現在のコンソール セッションで実行されるようにするには、スクリプト言語で使用されるファイル拡張子を追加します。 たとえば、現在のコンソールで Python スクリプトを実行するには、環境変数に
.py
拡張機能を追加します。 Windows で実行可能ファイルとして拡張機能を.py
サポートするには、CMD コマンド シェルのコマンドassoc
をftype
使用してファイル拡張子を登録する必要があります。 PowerShell には、ファイル ハンドラーを登録するダイレクト メソッドはありません。 詳細については、ftype コマンドのドキュメントを参照してください。PowerShell スクリプトは、常に現在のコンソール セッションで開始されます。 拡張機能を追加
.PS1
する必要はありません。
関連項目
PowerShell