Delen via


about_Environment_Variables

Korte beschrijving

Hierin wordt beschreven hoe u omgevingsvariabelen opent en beheert in PowerShell.

Lange beschrijving

Met omgevingsvariabelen worden gegevens opgeslagen die worden gebruikt door het besturingssysteem en andere programma's. De omgevingsvariabele WINDIR bevat bijvoorbeeld de locatie van de Windows-installatiemap. Programma's kunnen een query uitvoeren op de waarde van deze variabele om te bepalen waar windows-besturingssysteembestanden zich bevinden.

PowerShell kan omgevingsvariabelen openen en beheren in elk van de ondersteunde platformen van het besturingssysteem. Met de PowerShell-omgevingsprovider kunt u omgevingsvariabelen ophalen, toevoegen, wijzigen, wissen en verwijderen in de huidige console.

Omgevingsvariabelen worden, in tegenstelling tot andere typen variabelen in PowerShell, altijd opgeslagen als een tekenreeks en kunnen niet leeg zijn. In tegenstelling tot andere variabelen worden ze overgenomen door onderliggende processen, zoals lokale achtergrondtaken en de sessies waarin moduleleden worden uitgevoerd. Dit maakt omgevingsvariabelen geschikt voor het opslaan van waarden die nodig zijn in zowel bovenliggende als onderliggende processen.

In Windows kunnen omgevingsvariabelen worden gedefinieerd in drie bereiken:

  • Bereik van machine (of systeem)
  • Gebruikersbereik
  • Procesbereik

Het bereik Proces bevat de omgevingsvariabelen die beschikbaar zijn in het huidige proces of de PowerShell-sessie. Deze lijst met variabelen wordt overgenomen van het bovenliggende proces en is samengesteld op basis van de variabelen in de bereiken Machine en Gebruiker .

Wanneer u omgevingsvariabelen in PowerShell wijzigt, is de wijziging alleen van invloed op de huidige sessie. Dit gedrag lijkt op het gedrag van de Set opdracht in de Windows-opdrachtshell en de Setenv opdracht in UNIX-omgevingen. Als u waarden in het machine- of gebruikersbereik wilt wijzigen, moet u de methoden van de klasse System.Environment gebruiken.

Als u wijzigingen wilt aanbrengen in variabelen met machinebereik, moet u ook over machtigingen beschikken. Als u probeert een waarde te wijzigen zonder voldoende machtigingen, mislukt de opdracht en wordt een fout weergegeven in PowerShell.

PowerShell biedt verschillende methoden voor het gebruik en beheer van omgevingsvariabelen.

  • De syntaxis van de variabele
  • De cmdlets Omgevingsprovider en Item
  • De klasse .NET System.Environment

De syntaxis van de variabele gebruiken

U kunt de waarden van omgevingsvariabelen weergeven en wijzigen met de volgende syntaxis:

$Env:<variable-name>

Als u bijvoorbeeld de waarde van de WINDIR omgevingsvariabele wilt weergeven:

$Env:windir
C:\Windows

In deze syntaxis geeft het dollarteken ($) een variabele aan en geeft de stationsnaam (Env:) een omgevingsvariabele aan, gevolgd door de naam van de variabele (windir).

U kunt de waarde van omgevingsvariabelen maken en bijwerken met de volgende syntaxis:

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

Als u bijvoorbeeld de omgevingsvariabele Foo wilt maken, gaat u als volgt te werk:

$Env:Foo = 'An example'

Omdat omgevingsvariabelen altijd tekenreeksen zijn, kunt u deze gebruiken zoals elke andere variabele die een tekenreeks bevat. Bijvoorbeeld:

"The 'Foo' environment variable is set to: $Env:Foo"
$Env:Foo += '!'
$Env:Foo
The 'Foo' environment variable is set to: An example

An example!

Omdat een omgevingsvariabele geen lege tekenreeks kan zijn, wordt deze verwijderd als u er een instelt op $null of een lege tekenreeks. Bijvoorbeeld:

$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 er is een fout geretourneerd omdat de omgevingsvariabele is verwijderd. U kunt zien dat er geen fout wordt geretourneerd wanneer u deze gebruikt voor een lege tekenreeks:

'' | Get-Member -MemberType Properties
   TypeName: System.String

Name   MemberType Definition
----   ---------- ----------
Length Property   int Length {get;}

Zie about_Variables voor meer informatie over variabelen in PowerShell.

De cmdlets Omgevingsprovider en Item gebruiken

De omgevingsprovider van PowerShell biedt u een interface voor interactie met omgevingsvariabelen in een indeling die lijkt op een bestandssysteemstation. Hiermee kunt u omgevingsvariabelen en -waarden ophalen, toevoegen, wijzigen, wissen en verwijderen in PowerShell.

Als u bijvoorbeeld de Foo omgevingsvariabele wilt maken met de waarde :Bar

New-Item -Path Env:\Foo -Value 'Bar'
Name                           Value
----                           -----
Foo                            Bar

U kunt ook de omgevingsvariabele kopiëren met Copy-Item, de waarde van een omgevingsvariabele instellen met Set-Item, omgevingsvariabelen weergeven met Get-Itemen de omgevingsvariabele verwijderen met 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".

Zie about_Environment_Provider voor meer informatie over het gebruik van deomgevingsprovider voor het beheren van omgevingsvariabelen.

De System.Environment-methoden gebruiken

De klasse System.Environment biedt de methoden GetEnvironmentVariable en SetEnvironmentVariable om omgevingsvariabelen op te halen en te wijzigen.

In het volgende voorbeeld wordt een nieuwe omgevingsvariabele gemaakt, Foo, met een waarde van Bar en wordt vervolgens de waarde ervan geretourneerd.

[Environment]::SetEnvironmentVariable('Foo','Bar')
[Environment]::GetEnvironmentVariable('Foo')
Bar

U kunt een omgevingsvariabele verwijderen met de methode SetEnvironmentVariable door een lege tekenreeks op te geven voor de waarde van de variabele. Als u bijvoorbeeld de omgevingsvariabele Foo wilt verwijderen:

[Environment]::SetEnvironmentVariable('Foo','')
[Environment]::GetEnvironmentVariable('Foo')

Zie Omgevingsmethoden voor meer informatie over de methoden van de klasse System.Environment.

Wijzigingen in omgevingsvariabelen opslaan

In Windows zijn er drie methoden om een permanente wijziging aan te brengen in een omgevingsvariabele: deze instellen in uw profiel, met behulp van de methode SetEnvironmentVariable en met behulp van de System Configuratiescherm.

Omgevingsvariabelen opslaan in uw profiel

Elke omgevingsvariabele die u aan uw PowerShell-profiel toevoegt of wijzigt, is beschikbaar in elke sessie waarin uw profiel wordt geladen. Deze methode werkt voor elke versie van PowerShell op elk ondersteund platform.

Als u bijvoorbeeld de omgevingsvariabele CompanyUri wilt maken en de Path omgevingsvariabele wilt bijwerken zodat deze de C:\Tools map bevat, voegt u de volgende regels toe aan uw PowerShell-profiel:

$Env:CompanyUri = 'https://internal.contoso.com'
$Env:Path += ';C:\Tools'

Notitie

In Linux of macOS wordt de dubbele punt (:) gebruikt in plaats van een puntkomma(;) om een nieuw pad te scheiden van het pad dat eraan voorafgaat in de lijst.

U kunt het pad naar uw PowerShell-profiel ophalen met de $PROFILE automatische variabele. Zie about_Profiles voor meer informatie over profielen.

Omgevingsvariabelen opslaan met SetEnvironmentVariable

In Windows kunt u een bereik opgeven voor de methode SetEnvironmentVariable als de derde parameter om de omgevingsvariabele in dat bereik in te stellen. De machine- en gebruikersbereiken blijven beide behouden buiten het huidige proces, zodat u een nieuwe of gewijzigde omgevingsvariabele kunt opslaan.

Als u bijvoorbeeld een nieuwe omgevingsvariabele Foo met de waarde Barwilt opslaan in het machinebereik:

[Environment]::SetEnvironmentVariable('Foo', 'Bar', 'Machine')

U kunt een omgevingsvariabele uit het gebruikers- of machinebereik verwijderen door de waarde van de variabele in te stellen op een lege tekenreeks.

[Environment]::SetEnvironmentVariable('Foo', '', 'Machine')

Omgevingsvariabelen opslaan met het systeem Configuratiescherm

In de Configuratiescherm Systeem kunt u bestaande omgevingsvariabelen toevoegen of bewerken in de bereiken Gebruiker en Systeem (machine). Windows schrijft deze waarden naar het register, zodat ze behouden blijven tijdens sessies en opnieuw opstarten van het systeem.

Een permanente wijziging aanbrengen in een omgevingsvariabele in Windows met behulp van het systeem Configuratiescherm:

  1. Open de Configuratiescherm Systeem.
  2. Selecteer Systeem.
  3. Selecteer Geavanceerde systeeminstellingen.
  4. Ga naar het tabblad Geavanceerd .
  5. Selecteer Omgevingsvariabelen....
  6. Breng uw wijzigingen aan.

Omgevingsvariabelen van PowerShell

PowerShell-functies kunnen omgevingsvariabelen gebruiken om gebruikersvoorkeuren op te slaan. Deze variabelen werken als voorkeursvariabelen, maar ze worden overgenomen door onderliggende sessies van de sessies waarin ze zijn gemaakt. Zie about_Preference_Variables voor meer informatie over voorkeursvariabelen.

De omgevingsvariabelen die voorkeuren opslaan, zijn onder andere:

  • PSExecutionPolicyPreference

    Slaat het uitvoeringsbeleid op dat is ingesteld voor de huidige sessie. Deze omgevingsvariabele bestaat alleen wanneer u een uitvoeringsbeleid instelt voor één sessie. U kunt dit op twee verschillende manieren doen.

    • Start een sessie vanaf de opdrachtregel met behulp van de parameter ExecutionPolicy om het uitvoeringsbeleid voor de sessie in te stellen.

    • Gebruik de Set-ExecutionPolicy cmdlet. Gebruik de parameter Bereik met de waarde 'Proces'.

      Zie about_Execution_Policies voor meer informatie.

  • PSModuleAnalysisCachePath

    PowerShell biedt controle over het bestand dat wordt gebruikt om gegevens over modules en hun cmdlets in de cache op te slaan. De cache wordt gelezen bij het opstarten tijdens het zoeken naar een opdracht en wordt ergens na het importeren van een module op een achtergrondthread geschreven.

    De standaardlocatie van de cache is:

    • Windows PowerShell 5.1:$env:LOCALAPPDATA\Microsoft\Windows\PowerShell
    • PowerShell 6.0 en hoger: $env:LOCALAPPDATA\Microsoft\PowerShell
    • Niet-Windows-standaardinstelling: ~/.cache/powershell

    De standaardbestandsnaam voor de cache is ModuleAnalysisCache. Wanneer u meerdere exemplaren van PowerShell hebt geïnstalleerd, bevat de bestandsnaam een hexadecimaal achtervoegsel, zodat er een unieke bestandsnaam per installatie is.

    Notitie

    Als de opdrachtdetectie niet goed werkt, bijvoorbeeld in IntelliSense worden opdrachten weergegeven die niet bestaan, kunt u het cachebestand verwijderen. De cache wordt opnieuw gemaakt wanneer u PowerShell de volgende keer start.

    Als u de standaardlocatie van de cache wilt wijzigen, stelt u de omgevingsvariabele in voordat u PowerShell start. Wijzigingen in deze omgevingsvariabele zijn alleen van invloed op onderliggende processen. De waarde moet een volledig pad (inclusief bestandsnaam) een naam geven waarvoor PowerShell gemachtigd is om bestanden te maken en te schrijven.

    Als u de bestandscache wilt uitschakelen, stelt u deze waarde in op een ongeldige locatie, bijvoorbeeld:

    # `NUL` here is a special device on Windows that cannot be written to,
    # on non-Windows you would use `/dev/null`
    $env:PSModuleAnalysisCachePath = 'NUL'
    

    Hiermee stelt u het pad naar het NUL-apparaat in. PowerShell kan niet naar het pad schrijven, maar er wordt geen fout geretourneerd. U kunt de fouten zien die zijn gerapporteerd met behulp van een tracer:

    Trace-Command -PSHost -Name Modules -Expression { Import-Module Microsoft.PowerShell.Management -Force }
    
  • PSDisableModuleAnalysisCacheCleanup

    Bij het uitschrijven van de moduleanalysecache controleert PowerShell op modules die niet meer bestaan om een onnodig grote cache te voorkomen. Soms zijn deze controles niet wenselijk. In dat geval kunt u ze uitschakelen door deze omgevingsvariabelewaarde in te stellen op 1.

    Het instellen van deze omgevingsvariabele wordt onmiddellijk van kracht in het huidige proces.

  • PSModulePath

    De $env:PSModulePath omgevingsvariabele bevat een lijst met maplocaties die worden doorzocht om modules en resources te vinden.

    De effectieve locaties die zijn toegewezen aan $env:PSModulePath zijn standaard:

    • Locaties voor het hele systeem: deze mappen bevatten modules die worden geleverd met PowerShell. De modules worden opgeslagen op de $PSHOME\Modules locatie. Dit is ook de locatie waar de Windows-beheermodules zijn geïnstalleerd.

    • Door de gebruiker geïnstalleerde modules: dit zijn modules die door de gebruiker zijn geïnstalleerd. Install-Module heeft een bereikparameter waarmee u kunt opgeven of de module is geïnstalleerd voor de huidige gebruiker of voor alle gebruikers. Zie Install-Module voor meer informatie.

      • In Windows is de locatie van het gebruikersspecifieke bereik CurrentUser de $HOME\Documents\PowerShell\Modules map. De locatie van het bereik AllUsers is $env:ProgramFiles\PowerShell\Modules.
      • Op niet-Windows-systemen is de locatie van het gebruikersspecifieke bereik CurrentUser de $HOME/.local/share/powershell/Modules map. De locatie van het bereik AllUsers is /usr/local/share/powershell/Modules.

    Bovendien kunnen installatieprogramma's die modules installeren in andere mappen, zoals de map Program Files, hun locaties toevoegen aan de waarde van $env:PSModulePath.

    Zie about_PSModulePath voor meer informatie.

  • POWERSHELL_UPDATECHECK

    Het gedrag van updatemeldingen kan worden gewijzigd met behulp van de POWERSHELL_UPDATECHECK omgevingsvariabele. De volgende waarden worden ondersteund:

    • Off schakelt de updatemeldingsfunctie uit
    • Default is hetzelfde als het niet definiëren van POWERSHELL_UPDATECHECK:
      • GA-releases melden updates voor GA-releases
      • Preview-/RC-releases melden updates voor ga- en preview-releases
    • LTS alleen meldingen over updates voor lts-releases (long-term servicing)

    Zie about_Update_Notifications voor meer informatie.

  • POWERSHELL_TELEMETRY_OPTOUT

    Als u zich wilt afmelden voor telemetrie, stelt u de omgevingsvariabele in op true, yesof 1.

    Zie about_Telemetry voor meer informatie.

Andere omgevingsvariabelen die worden gebruikt door PowerShell

Padgegevens

  • PATHEXT

    De $env:PATHEXT variabele bevat een lijst met bestandsextensies die Windows beschouwt als uitvoerbare bestanden. Wanneer een scriptbestand met een van de vermelde extensies wordt uitgevoerd vanuit PowerShell, wordt het script uitgevoerd in de huidige console of terminalsessie. Als de bestandsextensie niet wordt vermeld, wordt het script uitgevoerd in een nieuwe consolesessie.

    Als u ervoor wilt zorgen dat scripts voor een andere scripttaal worden uitgevoerd in de huidige consolesessie, voegt u de bestandsextensie toe die wordt gebruikt door de scripttaal. Als u bijvoorbeeld Python-scripts wilt uitvoeren in de huidige console, voegt u de .py extensie toe aan de omgevingsvariabele. Als u wilt dat Windows de .py extensie ondersteunt als een uitvoerbaar bestand, moet u de bestandsextensie registreren met behulp van de ftype opdrachten en assoc van de CMD-opdrachtshell. PowerShell heeft geen directe methode om de bestandshandler te registreren. Zie de documentatie voor de ftype-opdracht voor meer informatie.

    PowerShell-scripts worden altijd gestart in de huidige consolesessie. U hoeft de .PS1 extensie niet toe te voegen.

  • XDG-variabelen

    Op niet-Windows-platforms gebruikt PowerShell de volgende XDG-omgevingsvariabelen, zoals gedefinieerd door de XDG Base Directory Specification.

    • XDG_CONFIG_HOME
    • XDG_DATA_HOME
    • XDG_CACHE_HOME

Zie ook