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:

  • 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.

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'

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.

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:

  • 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.

    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.

    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:

    • $env:LOCALAPPDATA\Microsoft\Windows\PowerShell

    Standardfilnamnet för cachen är ModuleAnalysisCache.

    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
    $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 (;).

  • 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.

Se även