Share via


about_Environment_Variables

簡単な説明

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

長い説明

環境変数には、オペレーティング システムやその他のプログラムで使用されるデータが格納されます。 たとえば、環境変数には WINDIR Windows インストール ディレクトリの場所が含まれます。 プログラムは、この変数の値に対してクエリを実行して、Windows オペレーティング システム ファイルの場所を確認できます。

PowerShell は、サポートされている任意のオペレーティング システム プラットフォームで環境変数にアクセスして管理できます。 PowerShell 環境プロバイダーを使用すると、現在のコンソールで環境変数を取得、追加、変更、クリア、および削除できます。

環境変数は、PowerShell の他の種類の変数とは異なり、常に文字列として格納され、空にすることはできません。 また、他の変数とは異なり、ローカル バックグラウンド ジョブやモジュール メンバーが実行されるセッションなど、子プロセスによって継承されます。 これにより、環境変数は、親プロセスと子プロセスの両方で必要な値を格納するのに適しています。

Windows では、環境変数は次の 3 つのスコープで定義できます。

  • マシン (またはシステム) スコープ
  • ユーザー スコープ
  • プロセス スコープ

プロセス スコープには、現在のプロセスまたは PowerShell セッションで使用できる環境変数が含まれています。 この変数の一覧は親プロセスから継承され、 Machine スコープと User スコープ内の変数から構築されます。

PowerShell で環境変数を変更すると、変更は現在のセッションにのみ影響します。 この動作は、Windows コマンド シェルでの コマンドの Set 動作と UNIX ベースの Setenv 環境での コマンドの動作に似ています。 Machine スコープまたは User スコープの値を変更するには、 System.Environment クラスのメソッドを使用する必要があります。

マシン スコープ変数を変更するには、アクセス許可も必要です。 十分なアクセス許可なしで値を変更しようとすると、コマンドは失敗し、PowerShell にエラーが表示されます。

PowerShell には、環境変数を使用および管理するためのさまざまな方法が用意されています。

  • 変数の構文
  • 環境プロバイダーと Item コマンドレット
  • .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!

環境変数を空の文字列にすることはできないため、 を または空の文字列に $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」を参照してください。

環境プロバイダーと Item コマンドレットの使用

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".

環境プロバイダーを使用して環境変数を管理する方法の詳細については、「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 では、環境変数を永続的に変更する方法として、プロファイルで設定する方法、SetEnvironmentVariable メソッドを使用する方法、System コントロール パネル を使用する方法の 3 つがあります。

プロファイルに環境変数を保存する

PowerShell プロファイルで追加または変更する環境変数は、プロファイルを読み込む任意のセッションで使用できます。 このメソッドは、サポートされている任意のプラットフォーム上の PowerShell の任意のバージョンで機能します。

たとえば、環境変数を CompanyUri 作成し、環境変数を Path 更新して フォルダーを C:\Tools 含めるには、PowerShell プロファイルに次の行を追加します。

$Env:CompanyUri = 'https://internal.contoso.com'
$Env:Path += ';C:\Tools'

注意

Linux または macOS では、セミコロン () の;代わりにコロン (:) を使用して、新しいパスをリスト内のパスから分離します。

自動変数を使用して、PowerShell プロファイルへのパスを $PROFILE 取得できます。 プロファイルの詳細については、「 about_Profiles」を参照してください。

SetEnvironmentVariable を使用した環境変数の保存

Windows では、 SetEnvironmentVariable メソッドのスコープを 3 番目のパラメーターとして指定して、そのスコープ内の環境変数を設定できます。 マシンスコープとユーザースコープの両方が現在のプロセスの外部で保持されるため、新しい環境変数または変更された環境変数を保存できます。

たとえば、 の値Barを持つ新しい環境変数Fooをマシン スコープに保存するには、次のようにします。

[Environment]::SetEnvironmentVariable('Foo', 'Bar', 'Machine')

変数の値を空の文字列に設定することで、ユーザーまたはコンピューターのスコープから環境変数を削除できます。

[Environment]::SetEnvironmentVariable('Foo', '', 'Machine')

システム コントロール パネルを使用した環境変数の保存

システム コントロール パネルでは、ユーザースコープとシステム (マシン) スコープで既存の環境変数を追加または編集できます。 Windows は、これらの値をレジストリに書き込み、セッションとシステムの再起動間で保持されるようにします。

システム コントロール パネルを使用して Windows 上の環境変数を永続的に変更するには、次の手順を実行します。

  1. システム コントロール パネルを開きます。
  2. [システム] を選択します。
  3. [ システムの詳細設定] を選択します
  4. [ 詳細設定 ] タブに移動します。
  5. [ 環境変数...] を選択します。
  6. 変更を行います。

PowerShell の環境変数

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

環境設定を格納する環境変数は次のとおりです。

  • PSExecutionPolicyPreference

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

    • ExecutionPolicy パラメーターを使用してコマンド ラインからセッションを開始し、セッションの実行ポリシーを設定します。

    • Set-ExecutionPolicy コマンドレットを使用します。 値が "Process" である Scope パラメーターを使用します。

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

  • PSModuleAnalysisCachePath

    PowerShell では、モジュールとそのコマンドレットに関するデータをキャッシュするために使用されるファイルを制御できます。 キャッシュは起動時にコマンドの検索中に読み取られ、モジュールのインポート後にバックグラウンド スレッドで書き込まれます。

    キャッシュの既定の場所は次のとおりです。

    • Windows PowerShell 5.1: $env:LOCALAPPDATA\Microsoft\Windows\PowerShell
    • PowerShell 6.0 以降: $env:LOCALAPPDATA\Microsoft\PowerShell
    • Windows 以外の既定値: ~/.cache/powershell

    キャッシュの既定のファイル名は です ModuleAnalysisCache。 PowerShell の複数のインスタンスがインストールされている場合、ファイル名には 16 進数のサフィックスが含まれているため、インストールごとに一意のファイル名が存在します。

    注意

    コマンド検出が正しく機能しない場合 (たとえば、IntelliSense に存在しないコマンドが表示されている場合)、キャッシュ ファイルを削除できます。 次回 PowerShell を起動すると、キャッシュが再作成されます。

    キャッシュの既定の場所を変更するには、PowerShell を開始する前に環境変数を設定します。 この環境変数の変更は、子プロセスにのみ影響します。 値には、PowerShell がファイルの作成および書き込みアクセス許可を持つ完全なパス (ファイル名を含む) を指定する必要があります。

    ファイル キャッシュを無効にするには、たとえば次のような無効な場所をこの値に設定します。

    # `NUL` here is a special device on Windows that cannot be written to,
    # on non-Windows you would use `/dev/null`
    $env:PSModuleAnalysisCachePath = 'NUL'
    

    これにより、 NUL デバイスへのパスが設定されます。 PowerShell ではパスに書き込められませんが、エラーは返されません。 トレーサーを使用して報告されたエラーを確認できます。

    Trace-Command -PSHost -Name Modules -Expression { Import-Module Microsoft.PowerShell.Management -Force }
    
  • PSDisableModuleAnalysisCacheCleanup

    モジュール分析キャッシュを書き出すとき、PowerShell は不要な大きなキャッシュを回避するために、存在しなくなったモジュールをチェックします。 これらのチェックが望ましくない場合があります。その場合は、この環境変数の値を に設定して無効にすることができます 1

    この環境変数の設定は、現在のプロセスですぐに有効になります。

  • 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 スコープの場所は $HOME/.local/share/powershell/Modules フォルダーです。 AllUsers スコープの場所は です/usr/local/share/powershell/Modules

    さらに、Program Files ディレクトリなどの他のディレクトリにモジュールをインストールするプログラムをセットアップすると、その場所を の $env:PSModulePath値に追加できます。

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

  • POWERSHELL_UPDATECHECK

    更新通知動作は、POWERSHELL_UPDATECHECK 環境変数を使用して変更できます。 サポートされている値を次に示します。

    • Off 更新通知機能をオフにする
    • Default は を定義しないのと POWERSHELL_UPDATECHECK同じです。
      • GA リリースでは、GA リリースに対する更新プログラムが通知されます
      • プレビュー/RC リリースでは、GA およびプレビュー リリースに対する更新プログラムが通知されます
    • LTS 長期サービス (LTS) GA リリースの更新のみを通知する

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

  • POWERSHELL_TELEMETRY_OPTOUT

    テレメトリをオプトアウトするには、環境変数を 、yes、または 1true設定します。

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

PowerShell で使用されるその他の環境変数

パス情報

  • PATHEXT

    変数には $env:PATHEXT 、Windows が実行可能ファイルと見なすファイル拡張子の一覧が含まれています。 表示されている拡張機能の 1 つを含むスクリプト ファイルが PowerShell から実行されると、スクリプトは現在のコンソールまたはターミナル セッションで実行されます。 ファイル拡張子が一覧にない場合、スクリプトは新しいコンソール セッションで実行されます。

    別のスクリプト言語のスクリプトが現在のコンソール セッションで実行されるようにするには、スクリプト言語で使用されるファイル拡張子を追加します。 たとえば、現在のコンソールで Python スクリプトを実行するには、 拡張機能を .py 環境変数に追加します。 Windows で拡張機能を.py実行可能ファイルとしてサポートするには、CMD コマンド シェルの コマンドと assoc コマンドを使用してftypeファイル拡張子を登録する必要があります。 PowerShell には、ファイル ハンドラーを登録するダイレクト メソッドはありません。 詳細については、 ftype コマンドのドキュメントを参照してください。

    PowerShell スクリプトは、常に現在のコンソール セッションで開始されます。 拡張機能を追加 .PS1 する必要はありません。

  • XDG 変数

    Windows 以外のプラットフォームでは、PowerShell は XDG 基本ディレクトリ仕様で定義されている次の XDG 環境変数を使用します。

    • XDG_CONFIG_HOME
    • XDG_DATA_HOME
    • XDG_CACHE_HOME

こちらもご覧ください