about_Environment_Variables

Korte beschrijving

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

In omgevingsvariabelen worden gegevens opgeslagen die worden gebruikt door het besturingssysteem en andere programma's. PowerShell maakt de volgende omgevingsvariabelen:

  • POWERSHELL_TELEMETRY_OPTOUT
  • POWERSHELL_DISTRIBUTION_CHANNEL
  • POWERSHELL_UPDATECHECK
  • PSExecutionPolicyPreference
  • PSModulePath
  • PSModuleAnalysisCachePath
  • PSDisableModuleAnalysisCacheCleanup

Zie de PowerShell-omgevingsvariabelen van dit artikel voor volledige beschrijvingen van deze variabelen.

Lange beschrijving

PowerShell kan omgevingsvariabelen openen en beheren op een van de ondersteunde besturingssysteemplatforms. Met de PowerShell-omgevingsprovider kunt u omgevingsvariabelen in de huidige console ophalen, toevoegen, wijzigen, wissen en verwijderen.

Notitie

In tegenstelling tot Windows zijn namen van omgevingsvariabelen in macOS en Linux hoofdlettergevoelig. En zijn bijvoorbeeld $env:Path$env:PATH verschillende omgevingsvariabelen op niet-Windows-platforms.

Omgevingsvariabelen, in tegenstelling tot andere typen variabelen in PowerShell, worden altijd opgeslagen als tekenreeksen. In tegenstelling tot andere variabelen worden ze overgenomen door onderliggende processen, zoals lokale achtergrondtaken en de sessies waarin moduleleden worden uitgevoerd. Hierdoor zijn 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 wordt samengesteld uit de variabelen in de bereiken Machine en Gebruiker .

Wanneer u omgevingsvariabelen wijzigt in PowerShell, is de wijziging alleen van invloed op de huidige sessie. Dit gedrag lijkt op het gedrag van de set opdracht in de Windows Command Shell en de setenv opdracht in UNIX-omgevingen. Als u waarden in de bereiken machine of gebruiker wilt wijzigen, moet u de methoden van de klasse System.Environment gebruiken.

Als u wijzigingen wilt aanbrengen in variabelen binnen het bereik van de machine, moet u ook gemachtigd zijn. Als u een waarde zonder voldoende machtigingen probeert te wijzigen, mislukt de opdracht en wordt er een fout weergegeven in PowerShell.

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

  • De syntaxis van de variabele
  • De omgevingsprovider en item-cmdlets
  • 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 de stationsnaam (Env:) geeft 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 Foo omgevingsvariabele wilt maken:

$Env:Foo = 'An example'

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

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

An example!

In PowerShell kan een omgevingsvariabele niet worden ingesteld op een lege tekenreeks. Als u een omgevingsvariabele instelt op $null of een lege tekenreeks, wordt deze uit de huidige sessie verwijderd. Voorbeeld:

$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 op een lege tekenreeks gebruikt:

'' | 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 een waarde van 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".

Gebruik de Get-ChildItem cmdlet om een volledige lijst met omgevingsvariabelen weer te geven:

Get-ChildItem Env:

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

De System.Environment-methoden gebruiken

De klasse System.Environment biedt de en SetEnvironmentVariable() methoden voor het GetEnvironmentVariable() ophalen en wijzigen van omgevingsvariabelen.

In het volgende voorbeeld wordt een nieuwe omgevingsvariabele gemaakt, Foomet een waarde van Bar en retourneert vervolgens de bijbehorende waarde.

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

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

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

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

Permanente omgevingsvariabelen maken in Windows

In Windows zijn er drie methoden voor het aanbrengen van een permanente wijziging in een omgevingsvariabele:

  • Deze instellen in uw profiel
  • SetEnvironmentVariable() De methode gebruiken
  • Systeem Configuratiescherm gebruiken

Omgevingsvariabelen instellen in uw profiel

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

Als u bijvoorbeeld de CompanyUri omgevingsvariabele wilt maken en de Path omgevingsvariabele wilt bijwerken om de C:\Tools map op te nemen, 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 instellen met SetEnvironmentVariable()

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

Als u bijvoorbeeld een nieuwe omgevingsvariabele Foo wilt opslaan met de waarde Barin het machinebereik:

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

U kunt een omgevingsvariabele verwijderen uit het bereik van de gebruiker of machine door de waarde van de variabele in te stellen op een lege tekenreeks.

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

Omgevingsvariabelen instellen in het systeem Configuratiescherm

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

Als u een permanente wijziging wilt aanbrengen in een omgevingsvariabele in Windows met behulp van het systeem Configuratiescherm:

  1. Open het systeem Configuratiescherm.
  2. Selecteer Systeem.
  3. Selecteer Advanced System Instellingen.
  4. Ga naar het tabblad Geavanceerd .
  5. Omgevingsvariabelen selecteren....
  6. Breng uw wijzigingen aan.

Permanente omgevingsvariabelen maken op niet-Windows-platforms

Linux en macOS hebben configuratiebestanden en scripts die het besturingssysteem gebruikt om omgevingsvariabelen in te stellen voordat een toepassing wordt gestart.

Wanneer u PowerShell als standaardshell (aanmeldingsshell) uitvoert, kunt u omgevingsvariabelen definiëren in de globale initialisatiebestanden die worden ondersteund door het besturingssysteem. In Linux kunt u bijvoorbeeld omgevingsvariabelen toevoegen aan het /etc/environment bestand of een script maken waarmee omgevingsvariabelen worden ingesteld en in de /etc/profile.d map worden geplaatst. In macOS kunt u omgevingsvariabelen toevoegen aan het /etc/profile bestand.

Wanneer u PowerShell vanuit een andere shell start, kunt u omgevingsvariabelen definiëren in de shellspecifieke initialisatiebestanden die worden gebruikt door niet-aanmeldingsshells, zoals ~/.bashrc voor bash of ~/.zshrc voor zsh.

Zie de documentatie voor uw besturingssysteem en de standaardshell voor meer informatie.

PowerShell-omgevingsvariabelen

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 worden gemaakt. Zie about_Preference_Variables voor meer informatie over voorkeursvariabelen.

De omgevingsvariabelen die voorkeuren opslaan, zijn onder andere:

  • POWERSHELL_TELEMETRY_OPTOUT

    Als u zich wilt afmelden voor telemetrie, stelt u de omgevingsvariabele truein op , yesof 1. Zie about_Telemetry voor meer informatie.

    Voordat deze omgevingsvariabele effect heeft, moet deze worden ingesteld voordat het PowerShell-proces wordt gestart. Zie de vorige secties voor informatie over het maken van permanente omgevingsvariabelen.

  • POWERSHELL_DISTRIBUTION_CHANNEL

    Vanaf PowerShell 7.2 wordt deze omgevingsvariabele ingesteld door de installatiepakketten om de methode en bron van installatie voor PowerShell vast te leggen.

    Deze informatie wordt opgenomen in de telemetriegegevens die naar Microsoft worden verzonden. Gebruikers mogen deze waarde niet wijzigen.

  • POWERSHELL_UPDATECHECK

    Het gedrag van de updatemelding kan worden gewijzigd met behulp van de POWERSHELL_UPDATECHECK omgevingsvariabele. Zie about_Update_Notifications voor meer informatie.

    De volgende waarden worden ondersteund:

    • Off schakelt de updatemeldingsfunctie uit
    • Default is hetzelfde als het niet definiëren POWERSHELL_UPDATECHECKvan:
      • GA-releases melden updates voor ALGEMENE beschikbaarheidsreleases
      • Preview-/RC-releases melden updates voor ALGEMENE beschikbaarheid en preview-releases
    • LTS geeft alleen meldingen over updates voor ltS-releases (long-term-servicing)

    Niet-standaardwaarden van omgevingsvariabele moeten worden ingesteld voordat u het PowerShell-proces start. Zie de vorige secties voor informatie over het maken van permanente omgevingsvariabelen.

  • 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 een waarde van Process.

    • Stel de omgevingsvariabele handmatig in. Als u de waarde van deze variabele wijzigt, wordt het uitvoeringsbeleid van het huidige proces gewijzigd.

    Deze informatie is alleen van toepassing op het Windows-platform. Raadpleeg about_Execution_Policies voor meer informatie.

  • PSModulePath

    De $env:PSModulePath omgevingsvariabele bevat een lijst met maplocaties die worden doorzocht om modules en resources te vinden. In Windows wordt de lijst met maplocaties gescheiden door het puntkomma (;) teken. Op niet-Windows-platforms scheidt de dubbele punt (:) de maplocaties in de omgevingsvariabele.

    De effectieve locaties waaraan is toegewezen $env:PSModulePath , zijn standaard:

    • Systeembrede locaties: deze mappen bevatten modules die worden verzonden 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 CurrentUser-bereik 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 CurrentUser-bereik de $HOME/.local/share/powershell/Modules map. De locatie van het bereik AllUsers is /usr/local/share/powershell/Modules.

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

  • PSModuleAnalysisCachePath

    PowerShell biedt controle over het bestand dat wordt gebruikt voor het opslaan van gegevens over modules en hun cmdlets. De cache wordt tijdens het opstarten gelezen tijdens het zoeken naar een opdracht en wordt enige tijd op een achtergrondthread geschreven nadat een module is geïmporteerd.

    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 per installatie een unieke bestandsnaam is.

    Notitie

    Als opdrachtdetectie niet goed werkt, bijvoorbeeld als IntelliSense opdrachten weergeeft 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. De waarde moet een volledig pad (inclusief bestandsnaam) noemen dat PowerShell gemachtigd is om bestanden te maken en te schrijven.

    Wijzigingen in deze omgevingsvariabele zijn alleen van invloed op onderliggende processen. Zie de vorige secties voor informatie over het maken van permanente omgevingsvariabelen.

    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 can't be written to,
    # on non-Windows you would use `/dev/null`
    $env:PSModuleAnalysisCachePath = 'NUL'
    

    Hiermee stelt u het pad in op het NUL-apparaat . 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 schrijven van de moduleanalysecache controleert PowerShell op modules die niet meer bestaan om 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 van kracht voor volgende opschoningsevenementen in het huidige proces. Om ervoor te zorgen dat opschonen is uitgeschakeld bij het opstarten, moet u de omgevingsvariabele instellen voordat u PowerShell start. Zie de vorige secties voor informatie over het maken van permanente omgevingsvariabelen.

Andere omgevingsvariabelen die worden gebruikt door PowerShell

Padgegevens

  • PAD

    De $env:PATH omgevingsvariabele bevat een lijst met maplocaties waarnaar het besturingssysteem zoekt naar uitvoerbare bestanden. In Windows wordt de lijst met maplocaties gescheiden door het puntkomma (;) teken. Op niet-Windows-platforms scheidt de dubbele punt (:) de maplocaties in de omgevingsvariabele.

  • PATHEXT

    De $env:PATHEXT variabele bevat een lijst met bestandsextensies die door Windows worden beschouwd 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. Voor Windows om de .py extensie te ondersteunen als een uitvoerbaar bestand moet u de bestandsextensie registreren met behulp van de ftype en assoc opdrachten van de CMD-opdrachtshell. PowerShell heeft geen directe methode om de bestandshandler te registreren. Zie de documentatie voor de opdracht ftype voor meer informatie.

    PowerShell-scripts starten altijd 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-specificatie.

    • XDG_CONFIG_HOME
    • XDG_DATA_HOME
    • XDG_CACHE_HOME

Terminalfuncties

Vanaf PowerShell 7.2 kunnen de volgende omgevingsvariabelen worden gebruikt om de functies van de virtuele terminal te beheren, zoals ANSI-escapereeksen die uitvoer kleuren. Ondersteuning voor ANSI-escapereeksen kan worden uitgeschakeld met behulp van de TERM of NO_COLOR omgevingsvariabelen.

  • TERMIJN

    De volgende waarden voor het wijzigen van $env:TERM het gedrag zijn als volgt:

    • dumb -Ingesteld $Host.UI.SupportsVirtualTerminal = $false
    • xterm-mono -Ingesteld $PSStyle.OutputRendering = PlainText
    • xtermm -Ingesteld $PSStyle.OutputRendering = PlainText
  • NO_COLOR

    Als $env:NO_COLOR deze bestaat, $PSStyle.OutputRendering wordt deze ingesteld op PlainText. Zie voor meer informatie over de omgevingsvariabele https://no-color.org/NO_COLOR.

Zie ook