Om miljövariabler

KORT BESKRIVNING

Beskriver hur du får åtkomst till Windows-miljövariabler i PowerShell.

LÅNG BESKRIVNING

Miljövariabler lagrar information om operativsystemmiljön. Den här informationen innehåller information som operativsystemets sökväg, antalet processorer som används av operativsystemet och platsen för tillfälliga mappar.

Miljövariablerna lagrar data som används av operativsystemet och andra program. Miljövariabeln innehåller till exempel WINDIR platsen för Windows-installationskatalogen. Program kan fråga värdet för den här variabeln för att avgöra var Windows-operativsystemfiler finns.

PowerShell kan komma åt och hantera miljövariabler på någon av de operativsystemplattformar som stöds. PowerShell-miljöprovidern förenklar den här processen genom att göra det enkelt att visa och ändra miljövariabler.

Miljövariabler, till skillnad från andra typer av variabler i PowerShell, ärvs 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 lagring av värden som behövs i både överordnade och underordnade processer.

Använda och ändra miljövariabler

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

  • Datoromfång (eller system)
  • Användaromfång
  • Processomfång

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 dator- och användaromfången . Unix-baserade plattformar har bara processomfånget .

Du kan visa och ändra värdena för miljövariabler utan att använda en cmdlet med hjälp av en variabelsyntax med miljöprovidern. Om du vill visa värdet för en miljövariabel använder du följande syntax:

$Env:<variable-name>

Om du till exempel vill visa värdet WINDIR för miljövariabeln skriver du följande kommando i PowerShell-kommandotolken:

$Env:windir

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

När du ändrar miljövariabler i PowerShell påverkar ändringen endast den aktuella sessionen. Det här beteendet liknar kommandots beteende Set 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 datoromfattning 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.

Du kan ändra värdena för variabler utan att använda en cmdlet med följande syntax:

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

Om du till exempel vill lägga ;c:\temp till värdet för Path miljövariabeln använder du följande syntax:

$Env:Path += ";c:\temp"

I Linux eller MacOS separerar kolonet (:) i kommandot den nya sökvägen från sökvägen som föregår den i listan.

$Env:PATH += ":/usr/local/temp"

Du kan också använda cmdletar för objekt, till exempel Set-Item, Remove-Itemoch Copy-Item för att ändra värdena för miljövariabler. Om du till exempel vill använda cmdleten Set-Item för att lägga ;c:\temp till värdet för Path miljövariabeln använder du följande syntax:

Set-Item -Path Env:Path -Value ($Env:Path + ";C:\Temp")

I det här kommandot omges värdet av parenteser så att det tolkas som en enhet.

Miljövariabler som lagrar inställningar

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

      Mer information finns i about_Execution_Policies.

  • PSModuleAnalysisCachePath

    PowerShell ger kontroll över filen som används för att cachelagrar 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.

    Anteckning

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

    Om du vill ändra standardplatsen för cacheminnet anger du miljövariabeln innan du startar PowerShell. Ändringar i den här miljövariabeln påverkar endast underordnade processer. Värdet ska namnge en fullständig sökväg (inklusive filnamn) som PowerShell har behörighet att skapa och skriva filer.

    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 cannot 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 det här miljövariabelvärdet till 1.

    Inställningen av den här miljövariabeln börjar gälla omedelbart i den aktuella processen.

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

    • 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 Install-Module(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 $env:PSModulePathför .

    Mer information finns i about_PSModulePath.

Hantera miljövariabler

PowerShell innehåller flera olika metoder för att hantera miljövariabler.

  • Miljöproviderns enhet
  • Objekt-cmdletar
  • Klassen .NET System.Environment
  • I Windows Kontrollpanelen System

Använda miljöprovidern

Varje miljövariabel representeras av en instans av klassen System.Collections.DictionaryEntry . I varje DictionaryEntry-objekt är namnet på miljövariabeln ordlistenyckeln. Värdet för variabeln är ordlistevärdet.

Om du vill visa egenskaperna och metoderna för objektet som representerar en miljövariabel i PowerShell använder du cmdleten Get-Member . Om du till exempel vill visa metoderna och egenskaperna för alla objekt på Env: enheten skriver du:

Get-Item -Path Env:* | Get-Member

Med PowerShell-miljöprovidern kan du komma åt miljövariabler på en PowerShell-enhet ( Env: enheten). Den här enheten ser ut ungefär som en filsystemenhet. Om du vill gå till Env: enheten skriver du:

Set-Location Env:

Använd cmdletarna Innehåll för att hämta eller ange värden för en miljövariabel.

PS Env:\> Set-Content -Path Test -Value 'Test value'
PS Env:\> Get-Content -Path Test
Test value

Du kan visa miljövariablerna på Env: enheten från valfri annan PowerShell-enhet och du kan gå in på Env: enheten för att visa och ändra miljövariablerna.

Använda objekt-cmdletar

När du refererar till en miljövariabel skriver Env: du enhetsnamnet följt av namnet på variabeln. Om du till exempel vill visa värdet för COMPUTERNAME miljövariabeln skriver du:

Get-ChildItem Env:Computername

Om du vill visa värdena för alla miljövariabler skriver du:

Get-ChildItem Env:

Eftersom miljövariabler inte har underordnade objekt är utdata Get-Item för och Get-ChildItem desamma.

Som standard visar PowerShell miljövariablerna i den ordning som de hämtas. Om du vill sortera listan över miljövariabler efter variabelnamn skickas utdata från ett Get-ChildItem kommando till cmdleten Sort-Object . Från valfri PowerShell-enhet skriver du till exempel:

Get-ChildItem Env: | Sort Name

Du kan också gå in på Env: enheten med hjälp av cmdleten Set-Location :

Set-Location Env:

När du är i Env: enheten kan du utelämna Env: enhetsnamnet från sökvägen. Om du till exempel vill visa alla miljövariabler skriver du:

PS Env:\> Get-ChildItem

Om du vill visa värdet för variabeln COMPUTERNAME inifrån Env: enheten skriver du:

PS Env:\> Get-ChildItem ComputerName

Spara ändringar i miljövariabler

Om du vill göra en beständig ändring av en miljövariabel i Windows använder du System Kontrollpanelen. Välj Avancerade systeminställningar. På fliken Avancerat klickar du på Miljövariabel.... Du kan 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.

Alternativt kan du lägga till eller ändra miljövariabler i PowerShell-profilen. Den här metoden fungerar för alla versioner av PowerShell på alla plattformar som stöds.

Använda System.Environment-metoder

Klassen System.Environment innehåller getEnvironmentVariable - och SetEnvironmentVariable-metoder som gör att du kan ange variabelns omfång.

I följande exempel används metoden GetEnvironmentVariable för att hämta datorinställningen PSModulePath för och metoden SetEnvironmentVariable för att lägga C:\Program Files\Fabrikam\Modules till sökvägen till värdet.

$path = [Environment]::GetEnvironmentVariable('PSModulePath', 'Machine')
$newpath = $path + ';C:\Program Files\Fabrikam\Modules'
[Environment]::SetEnvironmentVariable("PSModulePath", $newpath, 'Machine')

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

SE ÄVEN