Delen via


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:

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

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'

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.

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:

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

    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.

    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:

    • $env:LOCALAPPDATA\Microsoft\Windows\PowerShell

    De standaardbestandsnaam voor de cache is ModuleAnalysisCache.

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

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

Zie ook