about_Environment_Variables

Kort beskrivning

Beskriver hur du kommer åt Windows miljövariabler i PowerShell.

Lång beskrivning

Miljövariabler lagrar information om operativsystemmiljön. Den här informationen innehåller information som operativsystemsökväg, antalet processorer som används av operativsystemet och platsen för tillfälliga mappar.

Miljövariablerna lagrar data som används av operativsystemet och andra program. Miljövariabeln WINDIR innehåller till exempel platsen för Windows installationskatalogen. Program kan fråga värdet för den här variabeln för att Windows var operativsystemfilerna finns.

PowerShell kan komma åt och hantera miljövariabler på någon av de operativsystemplattformar som stöds. PowerShell-miljöprovidern förenklar den här processen genom att göra det enkelt att visa och ändra miljövariabler.

Miljövariabler, till skillnad från andra typer av variabler i PowerShell, ärvs av underordnade processer, till exempel lokala bakgrundsjobb och de sessioner där modulmedlemmar körs. Detta gör miljövariabler väl lämpade för att lagra värden som behövs i både överordnade och underordnade processer.

Använda och ändra miljövariabler

I Windows kan miljövariabler definieras i tre omfång:

  • Omfång för dator (eller system)
  • Användaromfång
  • Processomfång

Omfånget Process innehåller miljövariablerna som är tillgängliga i den aktuella processen eller PowerShell-sessionen. Den här listan över variabler ärvs från den överordnade processen och skapas från variablerna i omfången Dator och Användare. Unix-baserade plattformar har bara omfånget Process.

Du kan visa och ändra värdena för miljövariabler utan att använda en cmdlet med hjälp av en variabelsyntax med miljöprovidern. Om du vill visa värdet för en miljövariabel använder du följande syntax:

$Env:<variable-name>

Om du till exempel vill visa värdet för WINDIR miljövariabeln skriver du följande kommando i PowerShell-kommandotolken:

$Env:windir

I den här syntaxen anger dollartecknet ( ) en variabel och enhetsnamnet ( ) anger en miljövariabel $ Env: följt av variabelnamnet ( windir ).

När du ändrar miljövariabler i PowerShell påverkar ändringen bara den aktuella sessionen. Det här beteendet liknar beteendet för kommandot i Windows Command Shell och kommandot Set Setenv i UNIX-baserade miljöer. Om du vill ändra värden i omfången Dator eller Användare måste du använda metoderna i klassen System.Environment.

Om du vill göra ändringar i variabler med datoromfång måste du också ha behörighet. Om du försöker ändra ett värde utan tillräcklig behörighet misslyckas kommandot och PowerShell visar ett fel.

Du kan ändra värdena för variabler utan att använda en cmdlet med hjälp av följande syntax:

$Env:<variable-name> = "<new-value>"

Om du till exempel vill lägga ;c:\temp till i värdet för Path miljövariabeln använder du följande syntax:

$Env:Path += ";c:\temp"

I Linux eller macOS separerar kolonet ( ) i kommandot den nya sökvägen från sökvägen som : föregår den i listan.

$Env:PATH += ":/usr/local/temp"

Du kan också använda item-cmdletarna, till exempel Set-Item , och för att ändra värdena för Remove-Item Copy-Item miljövariabler. Om du till exempel vill använda Set-Item cmdleten för att lägga till ;c:\temp i värdet för Path miljövariabeln använder du följande syntax:

Remove-Item -Path Env:Path

I det här kommandot rensas variabeln. Observera att miljövariabeln refereras till som en objektsökväg $ och inte används.

Set-Item -Path Env:Path -Value ($Env:Path + ";C:\Temp")

I det här kommandot omges värdet av parenteser så att det tolkas som en enhet.

Hantera miljövariabler

PowerShell innehåller flera olika metoder för att hantera miljövariabler.

  • Miljöproviderenheten
  • Objekt-cmdletarna
  • Klassen .NET System.Environment
  • På Windows är Kontrollpanelen

Använda miljöprovidern

Varje miljövariabel representeras av en instans av klassen System.Collections.DictionaryEntry. I varje DictionaryEntry-objekt är namnet på miljövariabeln ordlistenyckeln. Värdet för variabeln är ordlistevärdet.

Om du vill visa egenskaperna och metoderna för objektet som representerar en miljövariabel i PowerShell använder du Get-Member cmdleten . Om du till exempel vill visa metoder och egenskaper för alla objekt på Env: enheten skriver du:

Get-Item -Path Env:* | Get-Member

Med PowerShell-miljöprovidern kan du komma åt miljövariabler på en PowerShell-enhet Env: (enheten). Den här enheten ser ut ungefär som en filsystemenhet. Gå till enheten Env: genom att skriva:

Set-Location Env:

Använd Content-cmdlets för att hämta eller ange värden för en miljövariabel.

PS Env:\> Set-Content -Path Test -Value 'Test value'
PS Env:\> Get-Content -Path Test
Test value

Du kan visa miljövariablerna på enheten från valfri annan PowerShell-enhet och du kan gå till enheten för att visa Env: Env: och ändra miljövariablerna.

Använda Item-cmdlets

När du refererar till en miljövariabel skriver Env: du enhetsnamnet följt av namnet på variabeln. Om du till exempel vill visa värdet för COMPUTERNAME miljövariabeln skriver du:

Get-ChildItem Env:Computername

Om du vill visa värdena för alla miljövariabler skriver du:

Get-ChildItem Env:

Eftersom miljövariabler inte har underordnade objekt är utdata Get-Item för Get-ChildItem och desamma.

Som standard visar PowerShell miljövariablerna i den ordning som de hämtas. Sortera listan över miljövariabler efter variabelnamn genom att skicka utdata för Get-ChildItem ett kommando till Sort-Object cmdleten . Från valfri PowerShell-enhet skriver du till exempel:

Get-ChildItem Env: | Sort Name

Du kan också gå in på Env: enheten med hjälp av Set-Location cmdleten :

Set-Location Env:

När du är på Env: enheten kan du utelämna Env: enhetsnamnet från sökvägen. Om du till exempel vill visa alla miljövariabler skriver du:

PS Env:\> Get-ChildItem

Om du vill visa värdet för COMPUTERNAME variabeln från Env: enheten skriver du:

PS Env:\> Get-ChildItem ComputerName

Spara ändringar i miljövariabler

Om du vill göra en beständig ändring i en miljövariabel på Windows använder du system-Kontrollpanelen. Välj Avancerat system Inställningar. På fliken Avancerat klickar du på Miljövariabel.... Du kan lägga till eller redigera befintliga miljövariabler i omfången Användare och System (dator). Windows skriver dessa värden till registret så att de bevaras mellan sessioner och systemstarter.

Alternativt kan du lägga till eller ändra miljövariabler i din PowerShell-profil. Den här metoden fungerar för alla versioner av PowerShell på alla plattformar som stöds.

Använda System.Environment-metoder

Klassen System.Environment innehåller metoderna GetEnvironmentVariable och SetEnvironmentVariable som gör att du kan ange variabeln omfång.

I följande exempel används metoden GetEnvironmentVariable för att hämta datorinställningen för och metoden PSModulePath SetEnvironmentVariable för att lägga till sökvägen C:\Program Files\Fabrikam\Modules till värdet.

$path = [Environment]::GetEnvironmentVariable('PSModulePath', 'Machine')
$newpath = $path + ';C:\Program Files\Fabrikam\Modules'
[Environment]::SetEnvironmentVariable("PSModulePath", $newpath, 'Machine')

Mer information om metoderna i klassen System.Environment finns i Miljömetoder.

PowerShells miljövariabler

PowerShell-funktioner kan använda miljövariabler för att lagra användarinställningar. Dessa variabler fungerar som inställningsvariabler, men de ärvs av underordnade sessioner för de sessioner där de skapas. Mer information om inställningsvariabler finns i about_Preference_Variables.

Miljövariablerna som lagrar inställningar är:

  • PSExecutionPolicyPreference

    Lagrar körningsprincipen som angetts för den aktuella sessionen. Den här miljövariabeln finns bara när du anger en körningsprincip för en enskild session. Du kan göra detta på två olika sätt.

    • Starta en session från kommandoraden med parametern ExecutionPolicy för att ange körningsprincipen för sessionen.

    • Använd Set-ExecutionPolicy cmdleten . Använd omfångsparametern med värdet "Process".

      Mer information finns i about_Execution_Policies.

  • PSModuleAnalysisCachePath

    PowerShell ger kontroll över filen som används för att cachelagra data om moduler och deras cmdlets. Cachen läses vid start när du söker efter ett kommando och skrivs på en bakgrundstråd någon gång efter att en modul har importerats.

    Standardplatsen för cachen är:

    • Windows PowerShell 5.1:$env:LOCALAPPDATA\Microsoft\Windows\PowerShell
    • PowerShell 6.0 och senare: $env:LOCALAPPDATA\Microsoft\PowerShell
    • Icke-Windows standard:~/.cache/powershell

    Standardfilnamnet för cachen är ModuleAnalysisCache . När du har flera instanser av PowerShell installerade innehåller filnamnet ett hexadecimalt suffix så att det finns ett unikt filnamn per installation.

    Anteckning

    Om kommandoidentifiering inte fungerar som det ska, till exempel om IntelliSense visar kommandon som inte finns, kan du ta bort cachefilen. Cachen återskapas nästa gång du startar PowerShell.

    Om du vill ändra standardplatsen för cachen anger du miljövariabeln innan du startar PowerShell. Ändringar i den här miljövariabeln påverkar endast underordnade processer. Värdet ska ge en fullständig sökväg (inklusive filnamn) som PowerShell har behörighet att skapa och skriva filer.

    Om du vill inaktivera filcacheminnet anger du värdet till en ogiltig plats, till exempel:

    # `NUL` here is a special device on Windows that cannot be written to,
    # on non-Windows you would use `/dev/null`
    $env:PSModuleAnalysisCachePath = 'NUL'
    

    Detta anger sökvägen till NUL-enheten. PowerShell kan inte skriva till sökvägen, men inget fel returneras. Du kan se felen som rapporterats med hjälp av en spårning:

    Trace-Command -PSHost -Name Modules -Expression { Import-Module Microsoft.PowerShell.Management -Force }
    
  • PSDisableModuleAnalysisCacheCleanup

    När du skriver ut modulanalyscachen söker PowerShell efter moduler som inte längre finns för att undvika en onödigt stor cache. Ibland är dessa kontroller inte önskvärda, och i så fall kan du inaktivera dem genom att ange miljövariabelvärdet till 1 .

    Inställningen av den här miljövariabeln börjar gälla omedelbart i den aktuella processen.

  • PSModulePath

    $env:PSModulePathMiljövariabeln innehåller en lista över mappplatser som genomsöks för att hitta moduler och resurser.

    Som standard är de effektiva platser som $env:PSModulePath tilldelats:

    • Systemomfattande platser: Dessa mappar innehåller moduler som levereras med PowerShell. Modulerna lagras på $PSHOME\Modules platsen. Det här är också den plats där Windows-hanteringsmodulerna installeras.

    • Användarinstallerade moduler: Det här är moduler som installerats av användaren. Install-Module har en Scope-parameter som gör att du kan ange om modulen är installerad för den aktuella användaren eller för alla användare. Mer information finns i Install-Module.

      • På Windows är mappen mappen för det användarspecifika omfånget CurrentUser. $HOME\Documents\PowerShell\Modules Platsen för omfånget AllUsers är $env:ProgramFiles\PowerShell\Modules .
      • I icke-Windows system är mappen platsen för det användarspecifika CurrentUser-omfånget. $HOME/.local/share/powershell/Modules Platsen för omfånget AllUsers är /usr/local/share/powershell/Modules .

    Dessutom kan installationsprogram som installerar moduler i andra kataloger, till exempel katalogen Programfiler, lägga till sina platser till värdet för $env:PSModulePath .

    Mer information finns i about_PSModulePath.

  • POWERSHELL_UPDATECHECK

    Beteendet för uppdateringsmeddelanden kan ändras med hjälp av POWERSHELL_UPDATECHECK miljövariabeln . Följande värden stöds:

    • Off inaktiverar funktionen uppdatera meddelande
    • Default är samma sak som att inte definiera POWERSHELL_UPDATECHECK :
      • Ga-versioner meddelar om uppdateringar av GA-versioner
      • Förhandsversioner/RC-versioner meddelar om uppdateringar av GA och förhandsversioner
    • LTS meddelar endast om uppdateringar av LTS-versioner (long term-servicing)

    Mer information finns i about_Update_Notifications.

  • POWERSHELL_TELEMETRY_OPTOUT

    Om du vill avanmäla dig från telemetrin anger du miljövariabeln true yes till , eller 1 .

    Mer information finns i about_Telemetry.

Andra miljövariabler som används av PowerShell

Sökvägsinformation

  • PATHEXT

    Variabeln $env:PATHEXT innehåller en lista över filnamnstillägg som Windows anses vara körbara filer. När en skriptfil med något av de angivna tilläggen körs från PowerShell körs skriptet i den aktuella konsolen eller terminalsessionen. Om filnamnstillägget inte visas körs skriptet i en ny konsolsession.

    För att säkerställa att skript för ett annat skriptspråk körs i den aktuella konsolsessionen lägger du till filnamnstillägget som används av skriptspråket. Om du till exempel vill köra Python-skript i den aktuella konsolen lägger du till .py tillägget i miljövariabeln . För Windows stöd för tillägget som en körbar fil måste du registrera filnamnstillägget med kommandona och i .py ftype assoc CMD-kommandogränssnittet. PowerShell har ingen direkt metod för att registrera filhanteraren. Mer information finns i dokumentationen för kommandot ftype.

    PowerShell-skript startar alltid i den aktuella konsolsessionen. Du behöver inte lägga till .PS1 tillägget.

  • XDG-variabler

    På icke-Windows använder PowerShell följande XDG-miljövariabler enligt definitionen i XDG Base Directory Specification.

    • XDG_CONFIG_HOME
    • XDG_DATA_HOME
    • XDG_CACHE_HOME

Terminalfunktioner

Från och med PowerShell 7.2 kan följande miljövariabler användas för att styra de funktioner för virtuell terminal som ANSI-escape-sekvenser som färgläggar utdata. Stöd för ANSI-escape-sekvenser kan inaktiveras med term- eller NO_COLOR miljövariabler.

  • BENÄMNA

    Följande värden för $env:TERM att ändra beteendet på följande sätt:

    • dumb – uppsättningar $Host.UI.SupportsVirtualTerminal = $false
    • xterm-mono – uppsättningar $PSStyle.OutputRendering = PlainText
    • xtermm – uppsättningar $PSStyle.OutputRendering = PlainText
  • NO_COLOR

    Om $env:NO_COLOR finns anges sedan till $PSStyle.OutputRendering PlainText. Mer information om NO_COLOR miljövariabeln finns i https://no-color.org/ .

Se även