Menyesuaikan lingkungan shell Anda

Profil PowerShell adalah skrip yang berjalan saat PowerShell dimulai. Anda dapat menggunakan profil untuk menyesuaikan lingkungan. Anda dapat:

  • menambahkan alias, fungsi, dan variabel
  • memuat modul
  • membuat drive PowerShell
  • menjalankan perintah arbitrer
  • dan mengubah pengaturan preferensi

Menempatkan pengaturan ini di profil Anda memastikan bahwa pengaturan tersebut tersedia setiap kali Anda memulai PowerShell di sistem Anda.

Catatan

Untuk menjalankan skrip di Windows, kebijakan eksekusi PowerShell perlu diatur ke RemoteSigned minimal. Kebijakan eksekusi tidak berlaku untuk macOS dan Linux. Untuk informasi selengkapnya, lihat about_Execution_Policy.

Variabel $PROFILE

Variabel $PROFILE otomatis menyimpan jalur ke profil PowerShell yang tersedia dalam sesi saat ini.

Ada empat kemungkinan profil yang tersedia untuk mendukung cakupan pengguna yang berbeda dan host PowerShell yang berbeda. Jalur yang sepenuhnya memenuhi syarat untuk setiap skrip profil disimpan di properti anggota berikut dari $PROFILE.

  • AllUsersAllHosts
  • AllUsersCurrentHost
  • CurrentUserAllHosts
  • CurrentUserCurrentHost

Anda dapat membuat skrip profil yang berjalan untuk semua pengguna atau hanya satu pengguna, CurrentUser. Profil CurrentUser disimpan di direktori beranda pengguna.

Ada juga profil yang berjalan untuk semua host PowerShell atau host tertentu. Skrip profil untuk setiap host PowerShell memiliki nama yang unik untuk host tersebut. Misalnya, nama file untuk Host Konsol standar di Windows atau aplikasi terminal default di platform lain adalah Microsoft.PowerShell_profile.ps1. Untuk Visual Studio Code (VS Code), nama filenya adalah Microsoft.VSCode_profile.ps1.

Untuk informasi selengkapnya, lihat about_Profiles.

Secara default, merujuk $PROFILE variabel mengembalikan jalur ke profil "Pengguna Saat Ini, Host Saat Ini". Jalur profil lainnya dapat diakses melalui properti $PROFILE variabel. Contohnya:

PS> $PROFILE
C:\Users\user1\Documents\PowerShell\Microsoft.PowerShell_profile.ps1
PS> $PROFILE.AllUsersAllHosts
C:\Program Files\PowerShell\7\profile.ps1

Cara membuat profil pribadi Anda

Ketika Anda pertama kali menginstal PowerShell pada sistem, file skrip profil dan direktori miliknya tidak ada. Perintah berikut membuat file skrip profil "Pengguna Saat Ini, Host Saat Ini" jika tidak ada.

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

Parameter New-Item Paksa cmdlet membuat folder yang diperlukan saat tidak ada. Setelah membuat file skrip, Anda dapat menggunakan editor favorit untuk menyesuaikan lingkungan shell Anda.

Menambahkan kustomisasi ke profil Anda

Artikel sebelumnya berbicara tentang menggunakan penyelesaian tab, prediktor perintah, dan alias. Artikel ini menunjukkan perintah yang digunakan untuk memuat modul yang diperlukan, membuat penyelesaian kustom, menentukan keybinding, dan pengaturan lainnya. Ini adalah jenis kustomisasi yang ingin Anda miliki tersedia di setiap sesi interaktif PowerShell. Skrip profil adalah tempat untuk pengaturan ini.

Cara paling sederhana untuk mengedit skrip profil Anda adalah dengan membuka file di editor kode favorit Anda. Misalnya, perintah berikut membuka profil di Visual Studio Code.

code $PROFILE

Anda juga dapat menggunakan notepad.exe di Windows, vi di Linux, atau editor teks lainnya.

Skrip profil berikut memiliki contoh untuk banyak kustomisasi yang disebutkan dalam artikel sebelumnya. Anda dapat menggunakan salah satu pengaturan ini di profil Anda sendiri.

## 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]: ' }
                elseif ($principal.IsInRole($adminRole)) { "[ADMIN]: " }
                else { '' })
    $body = 'PS ' + $(Get-Location)
    $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

Skrip profil ini menyediakan contoh untuk kustomisasi berikut:

  • Menambahkan dua PSDrive baru untuk sarang registri akar lainnya.
  • Membuat perintah yang dikustomisasi yang berubah jika Anda berjalan dalam sesi yang ditingkatkan.
  • Mengonfigurasi PSReadLine dan menambahkan keybinding. Pengaturan warna menggunakan fitur $PSStyle untuk menentukan pengaturan warna ANSI.
  • Menambahkan penyelesaian tab untuk alat CLI dotnet. Alat ini menyediakan parameter untuk membantu menyelesaikan argumen baris perintah. Blok skrip untuk Register-ArgumentCompleter menggunakan fitur tersebut untuk menyediakan penyelesaian tab.