Uw shellomgeving aanpassen

Een PowerShell-profiel is een script dat wordt uitgevoerd wanneer PowerShell wordt gestart. U kunt het profiel gebruiken om de omgeving aan te passen. U kunt:

  • aliassen, functies en variabelen toevoegen
  • modules laden
  • PowerShell-stations maken
  • willekeurige opdrachten uitvoeren
  • en voorkeursinstellingen wijzigen

Als u deze instellingen in uw profiel plaatst, zorgt u ervoor dat deze beschikbaar zijn wanneer u PowerShell op uw systeem start.

Notitie

Als u scripts wilt uitvoeren in Windows, moet het PowerShell-uitvoeringsbeleid minimaal worden ingesteld RemoteSigned . Uitvoeringsbeleid is niet van toepassing op macOS en Linux. Zie about_Execution_Policy voor meer informatie.

De variabele $PROFILE

De $PROFILE automatische variabele slaat de paden op naar de PowerShell-profielen die beschikbaar zijn in de huidige sessie.

Er zijn vier mogelijke profielen beschikbaar ter ondersteuning van verschillende gebruikersbereiken en verschillende PowerShell-hosts. De volledig gekwalificeerde paden voor elk profielscript worden opgeslagen in de volgende lideigenschappen van $PROFILE.

  • AllUsersAllHosts
  • AllUsersCurrentHost
  • CurrentUserAllHosts
  • CurrentUserCurrentHost

U kunt profielscripts maken die worden uitgevoerd voor alle gebruikers of slechts één gebruiker, de CurrentUser. CurrentUser-profielen worden opgeslagen in de basismap van de gebruiker.

Er zijn ook profielen die worden uitgevoerd voor alle PowerShell-hosts of specifieke hosts. Het profielscript voor elke PowerShell-host heeft een unieke naam voor die host. De bestandsnaam voor de standaardconsolehost in Windows of de standaardterminaltoepassing op andere platforms is Microsoft.PowerShell_profile.ps1bijvoorbeeld. Voor Visual Studio Code (VS Code) is Microsoft.VSCode_profile.ps1de bestandsnaam .

Zie about_Profiles voor meer informatie.

Als u naar de $PROFILE variabele verwijst, wordt standaard het pad naar het profiel Huidige gebruiker, huidige host geretourneerd. Het pad naar andere profielen kan worden geopend via de eigenschappen van de $PROFILE variabele. Voorbeeld:

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

Uw persoonlijke profiel maken

Wanneer u PowerShell voor het eerst op een systeem installeert, bestaan de profielscriptbestanden en de mappen waartoe ze behoren niet. Met de volgende opdracht maakt u het profielscriptbestand Huidige gebruiker, huidige host als dit niet bestaat.

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

Met de parameter Force van New-Item de cmdlet worden de benodigde mappen gemaakt wanneer deze niet bestaan. Zodra u het scriptbestand hebt gemaakt, kunt u uw favoriete editor gebruiken om uw shell-omgeving aan te passen.

Aanpassingen toevoegen aan uw profiel

De vorige artikelen hebben het gehad over het gebruik van tabvoltooiing, opdracht voorspellers en aliassen. In deze artikelen zijn de opdrachten getoond die worden gebruikt voor het laden van de vereiste modules, het maken van aangepaste completers, het definiëren van sleutelbindingen en andere instellingen. Dit zijn de soorten aanpassingen die u in elke interactieve PowerShell-sessie beschikbaar wilt hebben. Het profielscript is de plaats voor deze instellingen.

De eenvoudigste manier om uw profielscript te bewerken, is door het bestand te openen in uw favoriete code-editor. Met de volgende opdracht wordt bijvoorbeeld het profiel in VS Code geopend.

code $PROFILE

U kunt ook notepad.exe gebruikmaken van Windows, vi Linux of een andere teksteditor.

Het volgende profielscript bevat voorbeelden voor veel van de aanpassingen die in de vorige artikelen zijn genoemd. U kunt een van deze instellingen in uw eigen profiel gebruiken.

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

Dit profielscript bevat voorbeelden voor de volgende aanpassing:

  • Hiermee worden twee nieuwe PSDrives toegevoegd voor de andere hoofdregisters.
  • Hiermee maakt u een aangepaste prompt die wijzigingen aanbrengt als u in een sessie met verhoogde bevoegdheid werkt.
  • Hiermee configureert u PSReadLine en voegt u keybinding toe. De kleurinstellingen gebruiken de functie $PSStyle om de ANSI-kleurinstellingen te definiëren.
  • Hiermee voegt u tabvoltooiing toe voor het dotnet CLI-hulpprogramma . Het hulpprogramma biedt parameters om de opdrachtregelargumenten op te lossen. Het scriptblok voor Register-ArgumentCompleter gebruikt deze functie om de tabvoltooiing te bieden.