Kommentar
Å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_OPTOUTPOWERSHELL_DISTRIBUTION_CHANNELPOWERSHELL_UPDATECHECKPOWERSHELL_DIAGNOSTICS_OPTOUTPSExecutionPolicyPreferencePSModulePathPSModuleAnalysisCachePathPSDisableModuleAnalysisCacheCleanup
Fullständiga beskrivningar av dessa variabler finns i PowerShell-miljövariabler 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.
Obs
Till skillnad från Windows är miljövariabelnamn på macOS och Linux skiftlägeskänsliga. Till exempel är $Env:Path och $Env:PATH olika miljövariabler på plattformar som inte är Windows-plattformar.
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, såsom 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
- Processomfång
Omfånget Process 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 Machine- och User-omfång.
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ändaromfattningarna måste du använda metoderna i klassen System.Environment.
Om du vill göra ändringar i maskinomfattande variabler 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
- .NET System.Environment-klass
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 miljövariabeln windir:
$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
PowerShells Environment-provider ger dig ett gränssnitt för att interagera med för miljövariabler i ett format som liknar en filenhet. 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 miljövariabeln Foo 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 Environment-providern för att hantera miljövariabler finns i about_Environment_Provider.
Använd System.Environment-metoderna
Klassen System.Environment innehåller metoderna GetEnvironmentVariable() 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
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
Obs
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 Environment Methods.
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
- Använda metoden
SetEnvironmentVariable() - Använda systemkontrollpanelen
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 miljövariabeln CompanyUri och uppdatera PATH miljövariabeln så att den innehåller mappen C:\Tools lägger du till följande rader i PowerShell-profilen:
$Env:CompanyUri = 'https://internal.contoso.com'
$Env:PATH += ';C:\Tools'
Obs
I Linux eller macOS används kolonet (:) i stället för ett 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 autovariabeln $PROFILE. Mer information om profiler finns i about_Profiles.
Ange miljövariabler med SetEnvironmentVariable()
I Windows kan du ange ett omfång för metoden SetEnvironmentVariable() 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 Bartill 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 på systemkontrollpanelen
På systemkontrollpanelen kan du lägga till eller redigera befintliga miljövariabler i omfången User och System (Machine). 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 systemkontrollpanelen:
- Öppna systemkontrollpanelen.
- Välj System.
- Välj Avancerade systeminställningar.
- Gå till fliken Avancerat.
- Välj miljövariabler....
- Gör dina ä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 filen /etc/environment eller skapa ett skript som anger miljövariabler och placerar dem i mappen /etc/profile.d. På macOS kan du lägga till miljövariabler i filen /etc/profile.
När du startar PowerShell från ett annat gränssnitt kan du definiera miljövariabler i de 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_OPTOUTOm du vill välja bort telemetri anger du miljövariabeln till
true,yeseller1. 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_CHANNELFrå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_UPDATECHECKBeteendet för uppdateringsmeddelanden kan ändras med hjälp av miljövariabeln
POWERSHELL_UPDATECHECK. Mer information finns i about_Update_Notifications.Följande värden stöds:
-
Offinaktiverar funktionen för uppdateringsmeddelande -
Defaultär detsamma som att inte definieraPOWERSHELL_UPDATECHECK:- GA-versioner notifierar uppdateringar av sig själva
- Förhandsversioner/RC-versioner meddelar om uppdateringar av ga- och förhandsversioner
-
LTSmeddelar endast uppdateringar av långtidsservice (LTS) GA-utgåvor
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.
-
POWERSHELL_DIAGNOSTICS_OPTOUTDen här miljövariabeln lades till i PowerShell 7.6-preview.5. Som standard skapar PowerShell en namngiven pipe som används för Interprocess Communication (IPC), till exempel
Enter-PSHostProcess. PowerShell skapar det namngivna röret vid start så att det är tillgängligt för användning när det behövs.På andra plattformar än Windows implementeras namngivna pipes som filer i
/tmpmappen. Om PowerShell kraschar kanske dessa filer inte tas bort. Med tiden kan dessa filer ackumuleras.Från och med PowerShell 7.6
POWERSHELL_DIAGNOSTICS_OPTOUTär inställt påfalse. Om du vill inaktivera skapandet av det namngivna röret anger du miljövariabeln tilltrue,yeseller1.PSExecutionPolicyPreferenceLagrar 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 Scope 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.
PSModulePathMiljö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å
$PSHOME\Modulesplats. 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 parametern Scope 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 platsen för det användarspecifika CurrentUser omfånget
$HOME\Documents\PowerShell\Modulesmappen. Platsen för omfånget AllUsers är$Env:ProgramFiles\PowerShell\Modules. - På icke-Windows-system är platsen för det användarspecifika CurrentUser området mappen
$HOME/.local/share/powershell/Modules. Platsen för omfånget AllUsers är/usr/local/share/powershell/Modules.
- På 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.
PSModuleAnalysisCachePathPowerShell ger kontroll över filen som används för att cacha data om moduler och deras cmdlets. 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.Obs
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 barnprocesser. 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 det returneras inget felmeddelande. 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:
PSDisableModuleAnalysisCacheCleanupNä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 det här 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
PATHMiljö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.PATHEXTVariabeln
$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 tillägget
.pyi miljövariabeln. För att Windows ska kunna stödja.pyfilnamnstillägget som en körbar fil måste du registrera filnamnstillägget med hjälp av kommandonaftypeochassoci 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 tillägget
.ps1.XDGvariablerPå andra plattformar än Windows använder PowerShell följande XDG-miljövariabler enligt definitionen i XDG Base Directory Specification.
XDG_CONFIG_HOMEXDG_DATA_HOMEXDG_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 eller NO_COLOR miljövariabler.
TERMFöljande värden för
$Env:TERMändrar beteendet enligt följande:-
dumb– anger$Host.UI.SupportsVirtualTerminal = $false -
xterm-mono– anger$PSStyle.OutputRendering = PlainText -
xterm– anger$PSStyle.OutputRendering = PlainText
-
NO_COLOROm
$Env:NO_COLORfinns är$PSStyle.OutputRenderinginställt påPlainText. Mer information om miljövariabelnNO_COLORfinns i https://no-color.org/.