Notitie
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen u aan te melden of de directory te wijzigen.
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen de mappen te wijzigen.
Korte beschrijving
Hierin wordt beschreven hoe u omgevingsvariabelen opent en beheert in PowerShell.
Lange beschrijving
In omgevingsvariabelen worden gegevens opgeslagen die worden gebruikt door het besturingssysteem en andere programma's. PowerShell maakt de volgende omgevingsvariabelen:
POWERSHELL_TELEMETRY_OPTOUTPOWERSHELL_DISTRIBUTION_CHANNELPOWERSHELL_UPDATECHECKPOWERSHELL_DIAGNOSTICS_OPTOUTPSExecutionPolicyPreferencePSModulePathPSModuleAnalysisCachePathPSDisableModuleAnalysisCacheCleanup
Zie de PowerShell-omgevingsvariabelen van dit artikel voor volledige beschrijvingen van deze variabelen.
PowerShell kan omgevingsvariabelen openen en beheren op een van de ondersteunde besturingssysteemplatforms. Met de PowerShell Environment-provider 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.
$Env:Path en $Env:PATH zijn bijvoorbeeld 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 geërfd door childprocessen, zoals lokale achtergrondtaken en de sessies waarin modulen draaien. 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 niveaus:
- Machine- (of systeem-) bereik
- Gebruikersbereik
- Procesbereik
Het bereik van Process 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
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 machine- of gebruikersbereiken 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
- 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 omgevingsvariabele windir wilt weergeven:
$Env:windir
C:\Windows
In deze syntaxis geeft het dollarteken ($) een variabele aan en de naam van het station (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 omgevingsvariabele Foo wilt maken:
$Env:Foo = 'An example'
Omdat omgevingsvariabelen altijd tekenreeksen zijn, kunt u ze 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!
Vanaf PowerShell 7.5 kunt u een omgevingsvariabele instellen op een lege tekenreeks. Als u een omgevingsvariabele instelt om deze uit de huidige sessie te $null verwijderen. Bijvoorbeeld:
PS> $env:TEST = ''
PS> Get-ChildItem env:TEST
Name Value
---- -----
TEST
PS> $env:TEST = $null
PS> $env:TEST.Length
0
PS> Get-ChildItem env:TEST
Get-ChildItem: Cannot find path 'TEST' because it does not exist.
Zie about_Variablesvoor meer informatie over variabelen in PowerShell.
De cmdlets Omgevingsprovider en Item gebruiken
PowerShell's Environment provider biedt een interface voor het werken met omgevingsvariabelen in een formaat dat lijkt op een bestandssysteem-schijf. Hiermee kunt u omgevingsvariabelen en -waarden ophalen, toevoegen, wijzigen, wissen en verwijderen in PowerShell.
Als u bijvoorbeeld de omgevingsvariabele Foo wilt maken met een waarde van Bar:
New-Item -Path Env:\Foo -Value 'Bar'
Name Value
---- -----
Foo Bar
U kunt de omgevingsvariabele ook 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 cmdlet Get-ChildItem om een volledige lijst met omgevingsvariabelen weer te geven:
Get-ChildItem Env:
Vanaf PowerShell 7.5 kunt u een omgevingsvariabele instellen op een lege tekenreeks met behulp van de omgevingsprovider en Set-Item cmdlet. Als u een omgevingsvariabele instelt om deze uit de huidige sessie te $null verwijderen. Bijvoorbeeld:
PS> Set-Item env:TEST 'Foo'
PS> Get-ChildItem env:TEST
Name Value
---- -----
TEST Foo
PS> Set-Item env:TEST ''
PS> Get-ChildItem env:TEST
Name Value
---- -----
TEST
PS> Set-Item -Path env:TEST -Value $null
PS> Get-ChildItem env:TEST
Get-ChildItem: Cannot find path 'TEST' because it does not exist.
Zie about_Environment_Providervoor meer informatie over het gebruik van de Environment provider 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 bijbehorende waarde geretourneerd.
[Environment]::SetEnvironmentVariable('Foo','Bar')
[Environment]::GetEnvironmentVariable('Foo')
Bar
Vanaf PowerShell 7.5 kunt u een omgevingsvariabele instellen op een lege tekenreeks met behulp van de SetEnvironmentVariable() methode en een lege tekenreeks opgeven of $null voor de waarde van de variabele. Bijvoorbeeld:
PS> [Environment]::SetEnvironmentVariable('Foo','Bar')
PS> Get-ChildItem env:Foo
Name Value
---- -----
Foo Bar
PS> [Environment]::SetEnvironmentVariable('Foo','')
PS> Get-ChildItem env:Foo
Name Value
---- -----
Foo
PS> [Environment]::SetEnvironmentVariable('Foo','bar')
PS> Get-ChildItem env:Foo
Name Value
---- -----
Foo bar
PS> [Environment]::SetEnvironmentVariable('Foo',$null)
PS> Get-ChildItem env:Foo
Name Value
---- -----
Foo
Notitie
In tegenstelling tot de syntaxis van de variabele en providercases, wordt de omgevingsvariabele niet verwijderd als u de waarde toewijst aan $null het gebruik van de SetEnvironmentVariable() methode.
Voor meer informatie over de methoden van de klasse System.Environment, zie Environment Methods.
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
- De methode
SetEnvironmentVariable()gebruiken - Het Configuratiescherm van het systeem 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 omgevingsvariabele CompanyUri wilt maken en de omgevingsvariabele PATH wilt bijwerken om de map C:\Tools 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_Profilesvoor 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 wilt opslaan Foo 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 Configuratiescherm van het systeem
In het Configuratiescherm van het Systeem kunt u bestaande omgevingsvariabelen toevoegen of bewerken in het bereik User en System (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 Configuratiescherm van het systeem:
- Open het Configuratiescherm van het systeem.
- Selecteer System.
- Selecteer Geavanceerde systeeminstellingen.
- Ga naar het tabblad Geavanceerd.
- Selecteer Omgevingsvariabelen....
- 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 map /etc/profile.d 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 functioneren als voorkeurvariabelen, maar ze worden overgenomen door kind-sessies van de sessies waarin ze zijn aangemaakt. Zie about_Preference_Variablesvoor meer informatie over voorkeursvariabelen.
De omgevingsvariabelen die voorkeuren opslaan, zijn onder andere:
POWERSHELL_TELEMETRY_OPTOUTAls u zich wilt afmelden voor telemetrie, stelt u de omgevingsvariabele in op
true,yesof1. Zie about_Telemetryvoor 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_CHANNELVanaf 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_UPDATECHECKHet gedrag van de updatemelding kan worden gewijzigd met behulp van de omgevingsvariabele
POWERSHELL_UPDATECHECK. Zie about_Update_Notificationsvoor meer informatie.De volgende waarden worden ondersteund:
-
Offschakelt de updatemeldingsfunctie uit -
Defaultis hetzelfde als het niet definiëren vanPOWERSHELL_UPDATECHECK:- GA-releases melden updates voor ALGEMENE beschikbaarheidsreleases
- Preview- en RC-releases melden updates voor algemene beschikbaarheid en preview-releases
-
LTSstelt alleen op de hoogte van updates voor LTS GA-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.
-
POWERSHELL_DIAGNOSTICS_OPTOUTDeze omgevingsvariabele is toegevoegd in PowerShell 7.6-preview.5. PowerShell maakt standaard een benoemde pijp die wordt gebruikt voor IPC (Interprocess Communication), zoals
Enter-PSHostProcess. PowerShell maakt de benoemde pipe bij het opstarten, zodat deze beschikbaar is voor gebruik wanneer dat nodig is.Op niet-Windows-platforms worden benoemde pipes geïmplementeerd als bestanden in de
/tmpmap. Als PowerShell vastloopt, worden deze bestanden mogelijk niet verwijderd. Na verloop van tijd kunnen deze bestanden zich verzamelen.Vanaf PowerShell 7.6
POWERSHELL_DIAGNOSTICS_OPTOUTis ingesteld opfalse. Als u het maken van de benoemde pijp wilt uitschakelen, stelt u de omgevingsvariabeletruein op ,yesof1.PSExecutionPolicyPreferenceSlaat 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 cmdlet
Set-ExecutionPolicy. Gebruik de parameter Bereik met een waarde vanProcess.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. Zie about_Execution_Policiesvoor meer informatie.
PSModulePathDe omgevingsvariabele
$Env:PSModulePathbevat 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 die zijn toegewezen aan
$Env:PSModulePathzijn standaard:Systeembrede locaties: deze mappen bevatten modules die worden verzonden met PowerShell. De modules worden opgeslagen op de
$PSHOME\Moduleslocatie. 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-Moduleheeft een parameter Bereik waarmee u kunt opgeven of de module is geïnstalleerd voor de huidige gebruiker of voor alle gebruikers. Zie Install-Modulevoor meer informatie.- In Windows bevindt de gebruikersspecifieke CurrentUser scope zich in de
$HOME\Documents\PowerShell\Modulesmap. De locatie van het bereik AllUsers is$Env:ProgramFiles\PowerShell\Modules. - Op niet-Windows-systemen is de locatie van de gebruikerspecifieke CurrentUser scope de
$HOME/.local/share/powershell/Modulesmap. De locatie van het bereik AllUsers is/usr/local/share/powershell/Modules.
- In Windows bevindt de gebruikersspecifieke CurrentUser scope zich in de
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_PSModulePathvoor meer informatie.
PSModuleAnalysisCachePathPowerShell 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 standaardnaam 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 naar 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 }- Windows PowerShell 5.1:
PSDisableModuleAnalysisCacheCleanupBij 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
PATHDe omgevingsvariabele
$Env:PATHbevat 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.PATHEXTDe variabele
$Env:PATHEXTbevat 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 als een uitvoerbaar bestand te ondersteunen, moet u de bestandsextensie registreren met behulp van deftype- enassoc-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.XDGvariabelenOp niet-Windows-platforms gebruikt PowerShell de volgende XDG-omgevingsvariabelen zoals gedefinieerd door de XDG Base Directory Specification.
XDG_CONFIG_HOMEXDG_DATA_HOMEXDG_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.
TERMDe volgende waarden van
$Env:TERMhet gedrag als volgt wijzigen:-
dumb- instelt$Host.UI.SupportsVirtualTerminal = $false -
xterm-mono- instelt$PSStyle.OutputRendering = PlainText -
xterm- instelt$PSStyle.OutputRendering = PlainText
-
NO_COLORAls
$Env:NO_COLORbestaat, wordt$PSStyle.OutputRenderingingesteld opPlainText. ZieNO_COLORvoor meer informatie over de omgevingsvariabele https://no-color.org/.