Anpassa gränssnittsmiljön
En PowerShell-profil är ett skript som körs när PowerShell startar. Du kan använda profilen för att anpassa miljön. Du kan:
- lägga till alias, funktioner och variabler
- läsa in moduler
- skapa PowerShell-enheter
- köra godtyckliga kommandon
- och ändra inställningsinställningar
Om du placerar de här inställningarna i din profil ser du till att de är tillgängliga när du startar PowerShell i systemet.
Kommentar
Om du vill köra skript i Windows måste PowerShell-körningsprincipen vara inställd RemoteSigned
på minst. Körningsprinciper gäller inte för macOS och Linux. Mer information finns i about_Execution_Policy.
Variabeln $PROFILE
Den $PROFILE
automatiska variabeln lagrar sökvägarna till de PowerShell-profiler som är tillgängliga i den aktuella sessionen.
Det finns fyra tillgängliga profiler som stöder olika användaromfattningar och olika PowerShell-värdar. De fullständigt kvalificerade sökvägarna för varje profilskript lagras i följande medlemsegenskaper för $PROFILE
.
- AllUsersAllHosts
- AllUsersCurrentHost
- CurrentUserAllHosts
- CurrentUserCurrentHost
Du kan skapa profilskript som körs för alla användare eller bara en användare, CurrentUser. CurrentUser-profiler lagras i användarens hemkatalog.
Det finns också profiler som körs för alla PowerShell-värdar eller specifika värdar. Profilskriptet för varje PowerShell-värd har ett namn som är unikt för den värden. Filnamnet för standardkonsolvärden i Windows eller standardterminalprogrammet på andra plattformar är Microsoft.PowerShell_profile.ps1
till exempel . För Visual Studio Code (VS Code) är Microsoft.VSCode_profile.ps1
filnamnet .
Mer information finns i about_Profiles.
Om du refererar till variabeln $PROFILE
returneras som standard sökvägen till profilen "Aktuell användare, aktuell värd". Den andra profilsökvägen kan nås via egenskaperna för variabeln $PROFILE
.
Till exempel:
PS> $PROFILE
C:\Users\user1\Documents\PowerShell\Microsoft.PowerShell_profile.ps1
PS> $PROFILE.AllUsersAllHosts
C:\Program Files\PowerShell\7\profile.ps1
Så här skapar du din personliga profil
När du först installerar PowerShell på ett system finns inte profilskriptfilerna och de kataloger som de tillhör. Följande kommando skapar profilskriptfilen "Aktuell användare, aktuell aktuell värd" om den inte finns.
if (!(Test-Path -Path $PROFILE)) {
New-Item -ItemType File -Path $PROFILE -Force
}
Force-parametern New-Item
för cmdleten skapar de nödvändiga mapparna när de inte finns.
När du har skapat skriptfilen kan du använda din favoritredigerare för att anpassa shell-miljön.
Lägga till anpassningar i din profil
I de föregående artiklarna talades det om att använda tabbavslut, kommandoförsägare och alias. De här artiklarna visade de kommandon som används för att läsa in de moduler som krävs, skapa anpassade slutförare, definiera nyckelbindningar och andra inställningar. Det här är de typer av anpassningar som du vill ha tillgängliga i varje interaktiv PowerShell-session. Profilskriptet är platsen för de här inställningarna.
Det enklaste sättet att redigera ditt profilskript är att öppna filen i din favoritkodredigerare. Följande kommando öppnar till exempel profilen i VS Code.
code $PROFILE
Du kan också använda notepad.exe
i Windows, vi
i Linux eller någon annan textredigerare.
Följande profilskript innehåller exempel på många av de anpassningar som nämns i föregående artiklar. Du kan använda någon av de här inställningarna i din egen profil.
## 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
Det här profilskriptet innehåller exempel på följande anpassning:
- Lägger till två nya PSDrive för de andra rotregisterdatafilerna.
- Skapar en anpassad fråga som ändras om du kör i en upphöjd session.
- Konfigurerar PSReadLine och lägger till nyckelbindning. Färginställningarna använder funktionen $PSStyle för att definiera inställningarna för ANSI-färg.
- Lägger till flikavslut för dotnet CLI-verktyget . Verktyget innehåller parametrar som hjälper dig att lösa kommandoradsargumenten. Skriptblocket för Register-ArgumentCompleter använder den funktionen för att tillhandahålla flikens slutförande.