Dostosowywanie środowiska powłoki
Profil programu PowerShell to skrypt uruchamiany po uruchomieniu programu PowerShell. Możesz użyć profilu, aby dostosować środowisko. Masz następujące możliwości:
- dodawanie aliasów, funkcji i zmiennych
- ładowanie modułów
- tworzenie dysków programu PowerShell
- uruchamianie dowolnych poleceń
- i zmień ustawienia preferencji
Umieszczenie tych ustawień w profilu gwarantuje, że są one dostępne za każdym razem, gdy uruchomisz program PowerShell w systemie.
Uwaga
Aby uruchamiać skrypty w systemie Windows, należy ustawić zasady wykonywania programu PowerShell na RemoteSigned
co najmniej. Zasady wykonywania nie mają zastosowania do systemów macOS i Linux. Aby uzyskać więcej informacji, zobacz about_Execution_Policy.
Zmienna $PROFILE
Zmienna automatyczna $PROFILE
przechowuje ścieżki do profilów programu PowerShell, które są dostępne w bieżącej sesji.
Istnieją cztery możliwe profile do obsługi różnych zakresów użytkowników i różnych hostów programu PowerShell. W pełni kwalifikowane ścieżki dla każdego skryptu profilu są przechowywane we następujących właściwościach $PROFILE
elementu członkowskiego .
- AllUsersAllHosts
- AllUsersCurrentHost
- CurrentUserAllHosts
- CurrentUserCurrentHost
Możesz utworzyć skrypty profilu uruchamiane dla wszystkich użytkowników lub tylko jednego użytkownika CurrentUser. Profile CurrentUser są przechowywane w katalogu głównym użytkownika.
Istnieją również profile uruchamiane dla wszystkich hostów programu PowerShell lub określonych hostów. Skrypt profilu dla każdego hosta programu PowerShell ma unikatową nazwę dla tego hosta. Na przykład nazwa pliku standardowego hosta konsoli w systemie Windows lub domyślna aplikacja terminalowa na innych platformach to Microsoft.PowerShell_profile.ps1
. W przypadku programu Visual Studio Code (VS Code) nazwa pliku to Microsoft.VSCode_profile.ps1
.
Aby uzyskać więcej informacji, zobacz about_Profiles.
Domyślnie odwołanie do zmiennej $PROFILE
zwraca ścieżkę do profilu "Bieżący użytkownik, bieżący host". Dostęp do innej ścieżki profilów można uzyskać za pośrednictwem właściwości zmiennej $PROFILE
.
Na przykład:
PS> $PROFILE
C:\Users\user1\Documents\PowerShell\Microsoft.PowerShell_profile.ps1
PS> $PROFILE.AllUsersAllHosts
C:\Program Files\PowerShell\7\profile.ps1
Jak utworzyć profil osobisty
Podczas pierwszej instalacji programu PowerShell w systemie pliki skryptów profilu i katalogi, do których należą, nie istnieją. Następujące polecenie tworzy plik skryptu skryptu profilu "Bieżący użytkownik, bieżący host", jeśli nie istnieje.
if (!(Test-Path -Path $PROFILE)) {
New-Item -ItemType File -Path $PROFILE -Force
}
Parametr New-Item
Force polecenia cmdlet tworzy niezbędne foldery, gdy nie istnieją.
Po utworzeniu pliku skryptu możesz użyć ulubionego edytora, aby dostosować środowisko powłoki.
Dodawanie dostosowań do profilu
W poprzednich artykułach omówiono używanie uzupełniania kart, predyktorów poleceń i aliasów. W tych artykułach pokazano polecenia używane do ładowania wymaganych modułów, tworzenia niestandardowych elementów kompletnych, definiowania powiązania kluczy i innych ustawień. Są to rodzaje dostosowań, które mają być dostępne w każdej interaktywnej sesji programu PowerShell. Skrypt profilu jest miejscem dla tych ustawień.
Najprostszym sposobem edytowania skryptu profilu jest otwarcie pliku w ulubionym edytorze kodu. Na przykład następujące polecenie otwiera profil w programie VS Code.
code $PROFILE
Można również użyć notepad.exe
w systemie Windows, vi
w systemie Linux lub w innym edytorze tekstów.
Poniższy skrypt profilu zawiera przykłady wielu dostosowań wymienionych w poprzednich artykułach. Możesz użyć dowolnego z tych ustawień we własnym profilu.
## 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
Ten skrypt profilu zawiera przykłady następujących dostosowań:
- Dodaje dwa nowe dyski PSDrive dla innych gałęzi rejestru głównego.
- Tworzy dostosowany monit , który zmienia się w przypadku uruchomienia w sesji z podwyższonym poziomem uprawnień.
- Konfiguruje element PSReadLine i dodaje powiązanie klawiszy. Ustawienia kolorów używają funkcji $PSStyle do definiowania ustawień kolorów ANSI.
- Dodaje uzupełnianie kart dla narzędzia interfejsu wiersza polecenia dotnet. Narzędzie udostępnia parametry ułatwiające rozwiązywanie argumentów wiersza polecenia. Blok skryptu dla elementu Register-ArgumentCompleter używa tej funkcji w celu zapewnienia ukończenia karty.