Kabuk ortamınızı özelleştirme

PowerShell profili, PowerShell başlatıldığında çalışan bir betiktir. Ortamı özelleştirmek için profili kullanabilirsiniz. Şunları yapabilirsiniz:

  • diğer adlar, işlevler ve değişkenler ekleme
  • modülleri yükleme
  • PowerShell sürücüleri oluşturma
  • rastgele komutlar çalıştırma
  • ve tercih ayarlarını değiştirme

Bu ayarları profilinize yerleştirmek, sisteminizde PowerShell'i her başlattığınızda bunların kullanılabilir olmasını sağlar.

Not

Windows'da betikleri çalıştırmak için PowerShell yürütme ilkesinin en az olarak ayarlanması RemoteSigned gerekir. Yürütme ilkeleri macOS ve Linux için geçerli değildir. Daha fazla bilgi için bkz . about_Execution_Policy.

$PROFILE değişkeni

Otomatik değişken, $PROFILE geçerli oturumda kullanılabilen PowerShell profillerinin yollarını depolar.

Farklı kullanıcı kapsamlarını ve farklı PowerShell konaklarını desteklemek için dört olası profil vardır. Her profil betiğinin tam yolları aşağıdaki üye özelliklerinde $PROFILEdepolanır.

  • AllUsersAllHosts
  • AllUsersCurrentHost
  • CurrentUserAllHosts
  • CurrentUserCurrentHost

Tüm kullanıcılar veya yalnızca bir kullanıcı (CurrentUser) için çalışan profil betikleri oluşturabilirsiniz. CurrentUser profilleri kullanıcının giriş dizininde depolanır.

Tüm PowerShell konakları veya belirli konaklar için çalışan profiller de vardır. Her PowerShell konağı için profil betiği, bu konak için benzersiz bir ada sahiptir. Örneğin, Windows'ta standart Konsol Konağı'nın veya diğer platformlardaki varsayılan terminal uygulamasının dosya adı şeklindedir Microsoft.PowerShell_profile.ps1. Visual Studio Code (VS Code) için dosya adı şeklindedir Microsoft.VSCode_profile.ps1.

Daha fazla bilgi için bkz . about_Profiles.

Varsayılan olarak, değişkene $PROFILE başvuruda bulunmak "Geçerli Kullanıcı, Geçerli Ana Bilgisayar" profilinin yolunu döndürür. Diğer profiller yoluna değişkenin özellikleri $PROFILE aracılığıyla erişilebilir. Örneğin:

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

Kişisel profilinizi oluşturma

PowerShell'i bir sisteme ilk yüklediğinizde, profil betiği dosyaları ve ait oldukları dizinler mevcut değildir. Aşağıdaki komut, yoksa "Geçerli Kullanıcı, Geçerli Geçerli Ana Bilgisayar" profil betiği dosyasını oluşturur.

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

cmdlet'in New-Item Force parametresi, mevcut olmayan gerekli klasörleri oluşturur. Betik dosyasını oluşturduktan sonra, kabuk ortamınızı özelleştirmek için sık kullandığınız düzenleyiciyi kullanabilirsiniz.

Profilinize özelleştirme ekleme

Önceki makalelerde sekme tamamlama, komut tahminleri ve diğer adları kullanma hakkında konuşuluyordu. Bu makalelerde gerekli modülleri yüklemek, özel tamamlayıcılar oluşturmak, anahtar bağlamaları ve diğer ayarları tanımlamak için kullanılan komutlar gösterildi. Bunlar, her PowerShell etkileşimli oturumunda kullanılabilir olmasını istediğiniz özelleştirme türleridir. Profil betiği bu ayarların yeridir.

Profil betiğinizi düzenlemenin en basit yolu, dosyayı sık kullandığınız kod düzenleyicisinde açmaktır. Örneğin, aşağıdaki komut profili VS Code'da açar.

code $PROFILE

Ayrıca Windows, vi Linux veya başka bir metin düzenleyicisinde de kullanabilirsiniznotepad.exe.

Aşağıdaki profil betiğinde, önceki makalelerde bahsedilen özelleştirmelerin çoğu için örnekler verilmiştir. Bu ayarlardan herhangi birini kendi profilinizde kullanabilirsiniz.

## 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

Bu profil betiği aşağıdaki özelleştirme için örnekler sağlar:

  • Diğer kök kayıt defteri kovanları için iki yeni PSDrive ekler.
  • Yükseltilmiş bir oturumda çalışıyorsanız değişen özelleştirilmiş bir istem oluşturur.
  • PSReadLine'ı yapılandırıp anahtar bağlama ekler. Renk ayarları, ANSI renk ayarlarını tanımlamak için $PSStyle özelliğini kullanır.
  • dotnet CLI aracı için sekme tamamlama ekler. Araç, komut satırı bağımsız değişkenlerini çözmeye yardımcı olacak parametreler sağlar. Register-ArgumentCompleter için betik bloğu, sekmenin tamamlanmasını sağlamak için bu özelliği kullanır.