Anteckning
Åtkomst till den här sidan kräver auktorisering. Du kan prova att logga in eller ändra kataloger.
Åtkomst till den här sidan kräver auktorisering. Du kan prova att ändra kataloger.
Kort beskrivning
Beskriver hur du kommer åt och hanterar miljövariabler i PowerShell.
Lång beskrivning
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.
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 kommandot set i Windows Command Shell och kommandot setenv 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!
Från och med PowerShell 7.5 kan du ange en miljövariabel till en tom sträng. Om du anger en miljövariabel tar $null du bort den från den aktuella sessionen. Till exempel:
PS> $env:TEST = ''
PS> Get-ChildItem env:TEST
Name                           Value
----                           -----
TEST
PS> $env:TEST = $null
PS> $env:TEST.Length
0
PS> Get-ChildItem env:TEST
Get-ChildItem: Cannot find path 'TEST' because it does not exist.
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:
Från och med PowerShell 7.5 kan du ange en miljövariabel till en tom sträng med hjälp av miljöprovidern och Set-Item cmdleten. Om du anger en miljövariabel tar $null du bort den från den aktuella sessionen. Till exempel:
PS> Set-Item env:TEST 'Foo'
PS> Get-ChildItem env:TEST
Name                           Value
----                           -----
TEST                           Foo
PS> Set-Item env:TEST ''
PS> Get-ChildItem env:TEST
Name                           Value
----                           -----
TEST
PS> Set-Item -Path env:TEST -Value $null
PS> Get-ChildItem env:TEST
Get-ChildItem: Cannot find path 'TEST' because it does not exist.
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
Från och med PowerShell 7.5 kan du ange en miljövariabel till en tom sträng med hjälp av SetEnvironmentVariable() metoden och ange en tom sträng eller $null för variabelns värde. Till exempel:
PS> [Environment]::SetEnvironmentVariable('Foo','Bar')
PS> Get-ChildItem env:Foo
Name                           Value
----                           -----
Foo                            Bar
PS> [Environment]::SetEnvironmentVariable('Foo','')
PS> Get-ChildItem env:Foo
Name                           Value
----                           -----
Foo
PS> [Environment]::SetEnvironmentVariable('Foo','bar')
PS> Get-ChildItem env:Foo
Name                           Value
----                           -----
Foo                            bar
PS> [Environment]::SetEnvironmentVariable('Foo',$null)
PS> Get-ChildItem env:Foo
Name                           Value
----                           -----
Foo
Kommentar
Till skillnad från variabelsyntaxen och providerfallen tar det inte bort miljövariabeln genom att tilldela värdet till att $null använda SetEnvironmentVariable() metoden.
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:
- Ö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,- 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_UPDATECHECKmiljövariabeln. Mer information finns i about_Update_Notifications.- Följande värden stöds: - 
              Offinaktiverar funktionen för uppdateringsmeddelande
- 
              Defaultär detsamma som attPOWERSHELL_UPDATECHECKinte definiera :- GA-versioner meddelar om uppdateringar av GA-versioner
- Förhandsversioner/RC-versioner meddelar om uppdateringar av ga- och förhandsversioner
 
- 
              LTSmeddelar 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:PSModulePathinnehå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-Modulehar 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\Modulesmappen. Platsen för AllUsers-omfånget är$Env:ProgramFiles\PowerShell\Modules.
- I icke-Windows-system är platsen för det användarspecifika  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:PATHinnehå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:PATHEXTinnehå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 - .pytillägget i miljövariabeln. För att Windows ska ha stöd- .pyför tillägget som en körbar fil måste du registrera filtillägget med kommandona- ftypeoch- assocfö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 - .ps1till tillägget.
- XDGVariabler- 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:TERMatt ändra beteendet enligt följande:- 
              dumb-Uppsättningar$Host.UI.SupportsVirtualTerminal = $false
- 
              xterm-mono-Uppsättningar$PSStyle.OutputRendering = PlainText
- 
              xterm-Uppsättningar$PSStyle.OutputRendering = PlainText
 
- 
              
- NO_COLOR- Om - $Env:NO_COLORdet finns är det- $PSStyle.OutputRenderinginställt på- PlainText. Mer information om miljövariabeln finns i- NO_COLORhttps://no-color.org/.