次の方法で共有


シェル環境のカスタマイズ

PowerShell プロファイルは、PowerShell の起動時に実行されるスクリプトです。 プロファイルを使用して環境をカスタマイズできます。 できます:

  • エイリアス、関数、変数を追加する
  • モジュールの読み込み
  • PowerShell ドライブを作成する
  • 任意のコマンドを実行する
  • 基本設定の変更

これらの設定をプロファイルに含めると、システムで PowerShell を起動するたびに使用できるようになります。

Windows でスクリプトを実行するには、PowerShell 実行ポリシーを少なくとも RemoteSigned に設定する必要があります。 実行ポリシーは、macOS および Linux には適用されません。 詳細については、about_Execution_Policyを参照してください。

$PROFILE変数

$PROFILE 自動変数には、現在のセッションで使用できる PowerShell プロファイルへのパスが格納されます。

異なるユーザー スコープと異なる PowerShell ホストをサポートするために使用できるプロファイルは 4 つあります。 各プロファイル スクリプトの完全修飾パスは、$PROFILEの次のメンバー プロパティに格納されます。

  • AllUsersAllHosts
  • AllUsersCurrentHost
  • CurrentUserAllHosts
  • 現在のユーザー現在のホスト

すべてのユーザーまたは 1 人のユーザーに対して実行されるプロファイル スクリプトを作成できます。CurrentUserCurrentUser プロファイルは、ユーザーのホーム ディレクトリ パスの下に格納されます。 場所は、使用する PowerShell のオペレーティング システムとバージョンによって異なります。

既定では、$PROFILE 変数を参照すると、"現在のユーザー、現在のホスト" プロファイルへのパスが返されます。 他のプロファイル パスには、$PROFILE 変数のプロパティを使用してアクセスできます。 次のコマンドは、Windows での既定のプロファイルの場所を示しています。

PS> $PROFILE | Select-Object *
AllUsersAllHosts       : C:\Program Files\PowerShell\7\profile.ps1
AllUsersCurrentHost    : C:\Program Files\PowerShell\7\Microsoft.PowerShell_profile.ps1
CurrentUserAllHosts    : C:\Users\username\Documents\PowerShell\profile.ps1
CurrentUserCurrentHost : C:\Users\username\Documents\PowerShell\Microsoft.PowerShell_profile.ps1
Length                 : 69

次のコマンドは、Ubuntu Linux 上の既定のプロファイルの場所を示しています。

$PROFILE | Select-Object *

AllUsersAllHosts       : /opt/microsoft/powershell/7/profile.ps1
AllUsersCurrentHost    : /opt/microsoft/powershell/7/Microsoft.PowerShell_profile.ps1
CurrentUserAllHosts    : /home/username/.config/powershell/profile.ps1
CurrentUserCurrentHost : /home/username/.config/powershell/Microsoft.PowerShell_profile.ps1
Length                 : 67

すべての PowerShell ホストまたは特定のホストに対して実行されるプロファイルもあります。 各 PowerShell ホストのプロファイル スクリプトには、そのホストに固有の名前があります。 たとえば、Windows の標準コンソール ホストのファイル名や、他のプラットフォームの既定のターミナル アプリケーションのファイル名は Microsoft.PowerShell_profile.ps1。 Visual Studio Code (VS Code) の場合、ファイル名は Microsoft.VSCode_profile.ps1

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

個人用プロファイルを作成する方法

PowerShell をシステムに初めてインストールする場合、プロファイル スクリプト ファイルとそれらが属するディレクトリは存在しません。 次のコマンドは、"現在のユーザー、現在のホスト" プロファイル スクリプト ファイルが存在しない場合に作成します。

if (!(Test-Path -Path $PROFILE)) {
  New-Item -ItemType File -Path $PROFILE -Force
}

コマンドレットの New-Item パラメーターは、必要なフォルダーが存在しない場合に作成します。 スクリプト ファイルを作成したら、お気に入りのエディターを使用してシェル環境をカスタマイズできます。

プロファイルへのカスタマイズの追加

前の記事では、タブ補完コマンド予測器、および エイリアス使用について説明しました。 これらの記事では、必要なモジュールの読み込み、カスタム コンプリートの作成、キー バインドの定義、およびその他の設定に使用されるコマンドを示しました。 これらは、すべての PowerShell 対話型セッションで使用できるようにするカスタマイズの種類です。 プロファイル スクリプトは、これらの設定の場所です。

プロファイル スクリプトを編集する最も簡単な方法は、お気に入りのコード エディターでファイルを開く方法です。 たとえば、次のコマンドを実行すると、VS Codeでプロファイルが開きます。

code $PROFILE

また、Windows 上の notepad.exe、Linux 上の vi、その他のテキスト エディターを使用することもできます。

次のプロファイル スクリプトには、前の記事で説明したカスタマイズの多くの例があります。 これらの設定は、自分のプロファイルで使用できます。

## Map PSDrives to other registry hives
if (!(Test-Path HKCR:)) {
    $null = New-PSDrive -Name HKCR -PSProvider Registry -Root HKEY_CLASSES_ROOT
    $null = New-PSDrive -Name HKU -PSProvider Registry -Root HKEY_USERS
}

## Customize the prompt
function prompt {
    $identity = [Security.Principal.WindowsIdentity]::GetCurrent()
    $principal = [Security.Principal.WindowsPrincipal] $identity
    $adminRole = [Security.Principal.WindowsBuiltInRole]::Administrator

    $prefix = if (Test-Path Variable:/PSDebugContext) { '[DBG]: ' } else { '' }
    if ($principal.IsInRole($adminRole)) {
        $prefix = "[ADMIN]:$prefix"
    }
    $body = 'PS ' + $PWD.path
    $suffix = $(if ($NestedPromptLevel -ge 1) { '>>' }) + '> '
    "${prefix}${body}${suffix}"
}

## Create $PSStyle if running on a version older than 7.2
## - Add other ANSI color definitions as needed

if ($PSVersionTable.PSVersion.ToString() -lt '7.2.0') {
    # define escape char since "`e" may not be supported
    $esc = [char]0x1b
    $PSStyle = [pscustomobject]@{
        Foreground = @{
            Magenta = "${esc}[35m"
            BrightYellow = "${esc}[93m"
        }
        Background = @{
            BrightBlack = "${esc}[100m"
        }
    }
}

## Set PSReadLine options and keybindings
$PSROptions = @{
    ContinuationPrompt = '  '
    Colors             = @{
        Operator         = $PSStyle.Foreground.Magenta
        Parameter        = $PSStyle.Foreground.Magenta
        Selection        = $PSStyle.Background.BrightBlack
        InLinePrediction = $PSStyle.Foreground.BrightYellow + $PSStyle.Background.BrightBlack
    }
}
Set-PSReadLineOption @PSROptions
Set-PSReadLineKeyHandler -Chord 'Ctrl+f' -Function ForwardWord
Set-PSReadLineKeyHandler -Chord 'Enter' -Function ValidateAndAcceptLine

## Add argument completer for the dotnet CLI tool
$scriptblock = {
    param($wordToComplete, $commandAst, $cursorPosition)
    dotnet complete --position $cursorPosition $commandAst.ToString() |
        ForEach-Object {
            [System.Management.Automation.CompletionResult]::new($_, $_, 'ParameterValue', $_)
        }
}
Register-ArgumentCompleter -Native -CommandName dotnet -ScriptBlock $scriptblock

このプロファイル スクリプトでは、次のカスタマイズの例を示します。

  • 別のルートレジストリ ハイブ用に2つの新しい PSDrive を追加します。
  • 管理者特権のセッションで実行している場合に変更される、カスタマイズされたプロンプトを作成します。
  • PSReadLine を構成し、キー バインドを追加します。 カラー設定では、$PSStyle 機能を使用して ANSI カラー設定を定義します。
  • dotnet CLI ツールのタブ補完機能を追加します。 このツールには、コマンド ライン引数の解決に役立つパラメーターが用意されています。 Register-ArgumentCompleter のスクリプト ブロックは、その機能を使用してタブ補完を提供します。