Dela via


about_Environment_Variables

Kort beskrivning

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

Miljövariabler lagrar data som används av operativsystemet och andra program. PowerShell skapar följande miljövariabler:

  • POWERSHELL_TELEMETRY_OPTOUT
  • POWERSHELL_DISTRIBUTION_CHANNEL
  • POWERSHELL_UPDATECHECK
  • PSExecutionPolicyPreference
  • PSModulePath
  • PSModuleAnalysisCachePath
  • PSDisableModuleAnalysisCacheCleanup

Fullständiga beskrivningar av dessa variabler finns i PowerShell-miljövariablerna i den här artikeln.

Lång beskrivning

PowerShell kan komma åt och hantera miljövariabler på någon av de operativsystemplattformar som stöds. Med PowerShell-miljöprovidern kan du hämta, lägga till, ändra, rensa och ta bort miljövariabler i den aktuella konsolen.

Kommentar

Till skillnad från Windows är miljövariabelnamn på macOS och Linux skiftlägeskänsliga. Till exempel $env:Path , och $env:PATH är olika miljövariabler på plattformar som inte är Windows.

Miljövariabler, till skillnad från andra typer av variabler i PowerShell, lagras alltid som strängar. Till skillnad från andra variabler ärvs de också 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.

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

  • Datoromfång (eller system)
  • Användaromfång
  • Processens omfattning

Processomfånget innehåller de miljövariabler 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 .

När du ändrar miljövariabler i PowerShell påverkar ändringen endast den aktuella sessionen. Det här beteendet liknar beteendet för set kommandot i Windows-kommandogränssnittet setenv och kommandot i UNIX-baserade miljöer. Om du vill ändra värden i dator- eller användaromfången måste du använda metoderna i klassen System.Environment .

Om du vill göra ändringar i variabler med maskinomfattning 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.

PowerShell innehåller flera olika metoder för att använda och hantera miljövariabler.

  • Variabelsyntaxen
  • Cmdletar för miljöprovider och objekt
  • Klassen .NET System.Environment

Använd variabelsyntaxen

Du kan visa och ändra värdena för miljövariabler med följande syntax:

$Env:<variable-name>

Om du till exempel vill visa värdet för WINDIR miljövariabeln:

$Env:windir
C:\Windows

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

Du kan skapa och uppdatera värdet för miljövariabler med följande syntax:

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

Om du till exempel vill skapa Foo miljövariabeln:

$Env:Foo = 'An example'

Eftersom miljövariabler alltid är strängar kan du använda dem som andra variabler som innehåller en sträng. Till exempel:

"The 'Foo' environment variable is set to: $Env:Foo"
$Env:Foo += '!'
$Env:Foo
The 'Foo' environment variable is set to: An example

An example!

I PowerShell kan en miljövariabel inte anges till en tom sträng. Om du ställer in en miljövariabel på $null eller så tar en tom sträng bort den från den aktuella sessionen. Till exempel:

$Env:Foo = ''
$Env:Foo | Get-Member -MemberType Properties
Get-Member : You must specify an object for the Get-Member cmdlet.
At line:1 char:12
+ $env:foo | Get-Member
+            ~~~~~~~~~~
    + CategoryInfo          : CloseError: (:) [Get-Member], InvalidOperationException
    + FullyQualifiedErrorId : NoObjectInGetMember,Microsoft.PowerShell.Commands.GetMemberCommand

Get-Member returnerade ett fel eftersom miljövariabeln togs bort. Du kan se att det inte returnerar något fel när du använder det på en tom sträng:

'' | Get-Member -MemberType Properties
   TypeName: System.String

Name   MemberType Definition
----   ---------- ----------
Length Property   int Length {get;}

Mer information om variabler i PowerShell finns i about_Variables.

Använda cmdletarna Miljöprovider och Objekt

Med PowerShells miljöprovider får du ett gränssnitt för att interagera med miljövariabler i ett format som liknar en filsystemenhet. Med den kan du hämta, lägga till, ändra, rensa och ta bort miljövariabler och värden i PowerShell.

Om du till exempel vill skapa Foo miljövariabeln med värdet Bar:

New-Item -Path Env:\Foo -Value 'Bar'
Name                           Value
----                           -----
Foo                            Bar

Du kan också kopiera miljövariabeln med Copy-Item, ange värdet för en miljövariabel med Set-Item, lista miljövariabler med Get-Itemoch ta bort miljövariabeln med Remove-Item.

Copy-Item -Path Env:\Foo -Destination Env:\Foo2 -PassThru
Set-Item -Path Env:\Foo2 -Value 'BAR'
Get-Item -Path Env:\Foo*
Remove-Item -Path Env:\Foo* -Verbose
Name                           Value
----                           -----
Foo2                           Bar

Name                           Value
----                           -----
Foo2                           BAR
Foo                            Bar

VERBOSE: Performing the operation "Remove Item" on target "Item: Foo2".
VERBOSE: Performing the operation "Remove Item" on target "Item: Foo".

Använd cmdleten Get-ChildItem för att se en fullständig lista över miljövariabler:

Get-ChildItem Env:

Mer information om hur du använder miljöprovidern för att hantera miljövariabler finns i about_Environment_Provider.

Använd System.Environment-metoderna

Klassen System.Environment innehåller GetEnvironmentVariable() metoderna och SetEnvironmentVariable() för att hämta och ändra miljövariabler.

I följande exempel skapas en ny miljövariabel, , Foomed värdet Bar och returnerar sedan dess värde.

[Environment]::SetEnvironmentVariable('Foo','Bar')
[Environment]::GetEnvironmentVariable('Foo')
Bar

Du kan ta bort en miljövariabel med SetEnvironmentVariable() metoden genom att ange en tom sträng för variabelns värde. Om du till exempel vill ta bort Foo miljövariabeln:

[Environment]::SetEnvironmentVariable('Foo','')
[Environment]::GetEnvironmentVariable('Foo')

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

Skapa beständiga miljövariabler i Windows

I Windows finns det tre metoder för att göra en beständig ändring av en miljövariabel:

  • Ange dem i din profil
  • SetEnvironmentVariable() Använda metoden
  • Använda System Kontrolna tabla

Ange miljövariabler i din profil

Alla miljövariabler som du lägger till eller ändrar i din PowerShell-profil är tillgängliga i alla sessioner som läser in din profil. Den här metoden fungerar för alla versioner av PowerShell på valfri plattform som stöds.

Om du till exempel vill skapa CompanyUri miljövariabeln och uppdatera Path miljövariabeln så att den C:\Tools innehåller mappen lägger du till följande rader i din PowerShell-profil:

$Env:CompanyUri = 'https://internal.contoso.com'
$Env:Path += ';C:\Tools'

Kommentar

I Linux eller macOS används kolonet (:) i stället för semikolon(;) för att separera en ny sökväg från sökvägen som föregår den i listan.

Du kan hämta sökvägen till din PowerShell-profil med den $PROFILE automatiska variabeln. Mer information om profiler finns i about_Profiles.

Ange miljövariabler med SetEnvironmentVariable()

I Windows kan du ange ett omfång för SetEnvironmentVariable() metoden som den tredje parametern för att ange miljövariabeln i det omfånget. Både datorn och användaromfången bevaras utanför den aktuella processen, så att du kan spara en ny eller ändrad miljövariabel.

Om du till exempel vill spara en ny miljövariabel Foo med värdet Bari datoromfånget:

[Environment]::SetEnvironmentVariable('Foo', 'Bar', 'Machine')

Du kan ta bort en miljövariabel från användarens eller datorns omfång genom att ange variabelns värde till en tom sträng.

[Environment]::SetEnvironmentVariable('Foo', '', 'Machine')

Ange miljövariabler i System Kontrolna tabla

I System Kontrolna tabla kan du lägga till eller redigera befintliga miljövariabler i användar- och systemomfattningarna (dator). Windows skriver dessa värden till registret så att de bevaras mellan sessioner och omstarter av systemet.

Så här gör du en beständig ändring av en miljövariabel i Windows med hjälp av System Kontrolna tabla:

  1. Öppna System Kontrolna tabla.
  2. Välj System.
  3. Välj Avancerade systeminställningar.
  4. Gå till fliken Avancerat .
  5. Välj Miljövariabler....
  6. Gör önskade ändringar.

Skapa beständiga miljövariabler på plattformar som inte är Windows-plattformar

Linux och macOS har konfigurationsfiler och skript som operativsystemet använder för att ange miljövariabler innan ett program startas.

När du kör PowerShell som standardgränssnitt (inloggning) kan du definiera miljövariabler i de globala initieringsfiler som stöds av operativsystemet. I Linux kan du till exempel lägga till miljövariabler i /etc/environment filen eller skapa ett skript som anger miljövariabler och placerar dem i /etc/profile.d mappen. På macOS kan du lägga till miljövariabler i /etc/profile filen.

När du startar PowerShell från ett annat gränssnitt kan du definiera miljövariabler i gränssnittsspecifika initieringsfiler som används av gränssnitt som inte är inloggningsgränssnitt, till exempel ~/.bashrc för bash eller ~/.zshrc för zsh.

Mer information finns i dokumentationen för operativsystemet och standardgränssnittet.

PowerShell-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 i de sessioner där de skapas. Mer information om inställningsvariabler finns i about_Preference_Variables.

Miljövariablerna som lagrar inställningar är:

  • POWERSHELL_TELEMETRY_OPTOUT

    Om du vill välja bort telemetri ställer du in miljövariabeln på true, yeseller 1. Mer information finns i about_Telemetry.

    För att den här miljövariabeln ska ha effekt måste den anges innan PowerShell-processen startas. I föregående avsnitt finns information om hur du skapar beständiga miljövariabler.

  • POWERSHELL_DISTRIBUTION_CHANNEL

    Från och med PowerShell 7.2 anges den här miljövariabeln av installationspaketen för att registrera metoden och installationskällan för PowerShell.

    Den här informationen ingår i telemetridata som skickas till Microsoft. Användarna bör inte ändra det här värdet.

  • POWERSHELL_UPDATECHECK

    Beteendet för uppdateringsmeddelanden kan ändras med hjälp av POWERSHELL_UPDATECHECK miljövariabeln. Mer information finns i about_Update_Notifications.

    Följande värden stöds:

    • Off inaktiverar funktionen för uppdateringsmeddelande
    • Default är detsamma som att POWERSHELL_UPDATECHECKinte definiera :
      • GA-versioner meddelar om uppdateringar av GA-versioner
      • Förhandsversioner/RC-versioner meddelar om uppdateringar av ga- och förhandsversioner
    • LTS meddelar endast uppdateringar av långfristiga serviceutgåvor (LTS)

    Värden som inte är standard för miljövariabeln måste anges innan PowerShell-processen startas. I föregående avsnitt finns information om hur du skapar beständiga miljövariabler.

  • 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 enda 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 cmdleten Set-ExecutionPolicy . Använd parametern Omfång med värdet Process.

    • Ange miljövariabeln manuellt. Om du ändrar värdet för den här variabeln ändras körningsprincipen för den aktuella processen.

    Den här informationen gäller endast för Windows-plattformen. Mer information finns i about_Execution_Policies.

  • PSModulePath

    Miljövariabeln $env:PSModulePath innehåller en lista över mappplatser som söks efter moduler och resurser. I Windows avgränsas listan över mappplatser med semikolontecknet (;). På icke-Windows-plattformar separerar kolonet (:) mappplatserna i miljövariabeln.

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

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

    • Användarinstallerade moduler: Det här är moduler som installeras av användaren. Install-Module har en omfångsparameter 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 Installera modul.

      • I Windows är platsen för det användarspecifika CurrentUser-omfånget $HOME\Documents\PowerShell\Modules mappen. Platsen för AllUsers-omfånget är $env:ProgramFiles\PowerShell\Modules.
      • I icke-Windows-system är platsen för det användarspecifika CurrentUser-omfånget $HOME/.local/share/powershell/Modules mappen. Platsen för AllUsers-omfånget ä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.

  • PSModuleAnalysisCachePath

    PowerShell ger kontroll över filen som används för att cachelagras data om moduler och deras cmdletar. Cachen läss vid start när du söker efter ett kommando och skrivs i 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
    • Standard för icke-Windows: ~/.cache/powershell

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

    Kommentar

    Om kommandoidentifieringen inte fungerar korrekt, till exempel IntelliSense visar kommandon som inte finns, kan du ta bort cachefilen. Cacheminnet återskapas nästa gång du startar PowerShell.

    Om du vill ändra standardplatsen för cacheminnet anger du miljövariabeln innan du startar PowerShell. Värdet ska namnge en fullständig sökväg (inklusive filnamn) som PowerShell har behörighet att skapa och skriva filer.

    Ändringar i den här miljövariabeln påverkar endast underordnade processer. I föregående avsnitt finns information om hur du skapar beständiga miljövariabler.

    Om du vill inaktivera filcachen anger du det här värdet till en ogiltig plats, till exempel:

    # `NUL` here is a special device on Windows that can't 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 de fel som rapporterats med hjälp av en tracer:

    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, 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 för efterföljande rensningshändelser i den aktuella processen. För att säkerställa att rensningen är inaktiverad vid start måste du ange miljövariabeln innan du startar PowerShell. I föregående avsnitt finns information om hur du skapar beständiga miljövariabler.

Andra miljövariabler som används av PowerShell

Sökvägsinformation

  • PATH

    Miljövariabeln $env:PATH innehåller en lista över mappplatser som operativsystemet söker efter körbara filer på. I Windows avgränsas listan över mappplatser med semikolontecknet (;). På icke-Windows-plattformar separerar kolonet (:) mappplatserna i miljövariabeln.

  • PATHEXT

    Variabeln $env:PATHEXT innehåller en lista över filnamnstillägg som Windows anser vara körbara filer. När en skriptfil med ett av de angivna tilläggen körs från PowerShell körs skriptet i den aktuella konsolen eller terminalsessionen. Om filtillä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 filtillä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 att Windows ska ha stöd .py för tillägget som en körbar fil måste du registrera filtillägget med kommandona ftype och assoc för CMD-kommandogränssnittet. PowerShell har ingen direkt metod för att registrera filhanteraren. Mer information finns i dokumentationen för ftype-kommandot .

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

  • XDG Variabler

    På andra plattformar än Windows använder PowerShell följande XDG-miljövariabler enligt definitionen i XDG-baskatalogspecifikationen.

    • 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 virtuella terminalfunktioner som ANSI-escapesekvenser som färgar utdata. Stöd för ANSI-escape-sekvenser kan inaktiveras med hjälp av TERM miljövariablerna eller NO_COLOR .

  • TERM

    Följande värden för $env:TERM att ändra beteendet enligt följande:

    • 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 det finns är det $PSStyle.OutputRendering inställt på PlainText. Mer information om miljövariabeln finns i NO_COLOR https://no-color.org/.

Se även