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-Item
och 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, , Foo
med 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 Bar
i 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:
- Öppna System Kontrolna tabla.
- Välj System.
- Välj Avancerade systeminställningar.
- Gå till fliken Avancerat .
- Välj Miljövariabler....
- 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
,yes
eller1
. 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 uppdateringsmeddelandeDefault
är detsamma som attPOWERSHELL_UPDATECHECK
inte 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ärdetProcess
.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
.
- I Windows är platsen för det användarspecifika CurrentUser-omfånget
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 }
- Windows PowerShell 5.1:
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 kommandonaftype
ochassoc
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
VariablerPå 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 iNO_COLOR
https://no-color.org/.