A rendszerhéjkörnyezet testreszabása

A PowerShell-profilok olyan szkriptek, amelyek a PowerShell indításakor futnak. A profillal testre szabhatja a környezetet. A következőket teheti:

  • aliasok, függvények és változók hozzáadása
  • modulok betöltése
  • PowerShell-meghajtók létrehozása
  • tetszőleges parancsok futtatása
  • és a beállítások módosítása

Ha ezeket a beállításokat a profiljában helyezi el, azok mindig elérhetők lesznek, amikor elindítja a PowerShellt a rendszeren.

Feljegyzés

A szkriptek Windows rendszerben való futtatásához a PowerShell végrehajtási szabályzatát legalább be kell állítani RemoteSigned . A végrehajtási szabályzatok nem vonatkoznak a macOS-ra és a Linuxra. További információ: about_Execution_Policy.

A $PROFILE változó

Az $PROFILE automatikus változó tárolja az aktuális munkamenetben elérhető PowerShell-profilok elérési útját.

Négy lehetséges profil érhető el a különböző felhasználói hatókörök és a különböző PowerShell-gazdagépek támogatásához. Az egyes profilszkriptekhez tartozó teljes elérési utak a következő tagtulajdonságokban $PROFILEvannak tárolva.

  • AllUsersAllHosts
  • AllUsersCurrentHost
  • CurrentUserAllHosts
  • CurrentUserCurrentHost

Létrehozhat profilszkripteket, amelyek az összes felhasználóhoz vagy csak egy felhasználóhoz, a CurrentUserhez futnak. A CurrentUser-profilok a felhasználó kezdőlapján vannak tárolva.

Vannak olyan profilok is, amelyek az összes PowerShell-gazdagéphez vagy adott gazdagéphez futnak. Az egyes PowerShell-gazdagépek profilszkriptjének neve egyedi az adott gazdagéphez. A windowsos standard konzolgazda fájlneve vagy más platformokon Microsoft.PowerShell_profile.ps1az alapértelmezett terminálalkalmazás neve. A Visual Studio Code (VS Code) fájlneve a következő Microsoft.VSCode_profile.ps1: .

További információ: about_Profiles.

Alapértelmezés szerint a $PROFILE változóra való hivatkozás az "Aktuális felhasználó, Aktuális gazdagép" profil elérési útját adja vissza. A többi profil elérési útja a változó tulajdonságain $PROFILE keresztül érhető el. Példa:

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

Személyes profil létrehozása

Amikor először telepíti a PowerShellt egy rendszerre, a profilszkriptfájlok és azok könyvtárai nem léteznek. A következő parancs létrehozza az "Aktuális felhasználó, aktuális gazdagép" profilszkriptfájlt, ha az nem létezik.

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

A parancsmag Force paramétere New-Item létrehozza a szükséges mappákat, ha nem léteznek. Miután létrehozta a szkriptfájlt, a kedvenc szerkesztőjével testre szabhatja a rendszerhéj-környezetet.

Testreszabások hozzáadása a profilhoz

Az előző cikkek a tabulátorkiegészítésről, a parancs-előrejelzőkről és az aliasokról szólnak. Ezek a cikkek bemutatták a szükséges modulok betöltéséhez, egyéni befejezők létrehozásához, kulcskötések definiálásához és egyéb beállításokhoz használt parancsokat. Ezek azok a testreszabások, amelyeket minden PowerShell-interaktív munkamenetben el szeretneérhetővé tenni. Ezekhez a beállításokhoz a profilszkript a hely.

A profilszkript szerkesztésének legegyszerűbb módja a fájl megnyitása a kedvenc kódszerkesztőben. A következő parancs például megnyitja a profilt a VS Code-ban.

code $PROFILE

Windows rendszeren, vi Linuxon vagy bármely más szövegszerkesztőben is használhatónotepad.exe.

Az alábbi profilszkript példákat mutat be az előző cikkekben említett számos testreszabáshoz. Ezeket a beállításokat a saját profiljában is használhatja.

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

Ez a profilszkript a következő testreszabásra kínál példákat:

  • Két új PSDrive-ot ad hozzá a többi gyökérregisztrációs adatbázishoz.
  • Létrehoz egy testre szabott kérést , amely megváltozik, ha emelt szintű munkamenetben fut.
  • Konfigurálja a PSReadLine-t , és hozzáadja a kulcskötést. A színbeállítások a $PSStyle funkcióval határozzák meg az ANSI színbeállításait.
  • A dotnet CLI-eszköz lapkiegészítését adja hozzá. Az eszköz paramétereket biztosít a parancssori argumentumok feloldásához. A Register-ArgumentCompleter szkriptblokkja ezzel a funkcióval biztosítja a lap befejezését.