Articles

Over omgevingsvariabelen

  • 09/22/2020
  • 8 minuten om te lezen
    • S
    • r
    • s
    • d
    • c
    • +1

Korte beschrijving

Hierin wordt beschreven hoe Windows-omgevingsvariabelen in PowerShell kunnen worden geopend.

LANGE OMSCHRIJVING

Milieuvariabelen slaan informatie op over de omgeving van het besturingssysteem. Deze informatie omvat details zoals het besturingssysteempad, het aantal processors dat door het besturingssysteem wordt gebruikt, en de locatie van tijdelijke mappen.

De omgevingsvariabelen slaan gegevens op die door het besturingssysteem en andere programma’s worden gebruikt. De omgevingsvariabele WINDIR bevat bijvoorbeeld de locatie van de Windows-installatiemap. Programma’s kunnen de waarde van deze variabele opvragen om te bepalen waar de bestanden van het Windows-besturingssysteem zich bevinden.

PowerShell kan omgevingsvariabelen openen en beheren op elk van de ondersteunde besturingssysteemplatforms. De PowerShell-omgevingsprovider vereenvoudigt dit proces door het eenvoudig te maken omgevingsvariabelen te bekijken en te wijzigen.

Omgevingsvariabelen worden, in tegenstelling tot andere soorten variabelen in PowerShell, geërfd door child-processen, zoals lokale achtergrondtaken en de sessies waarin moduleleden worden uitgevoerd. Dit maakt omgevingsvariabelen zeer geschikt voor het opslaan van waarden die nodig zijn in zowel ouder- als kindprocessen.

Omgevingsvariabelen gebruiken en wijzigen

Op Windows kunnen omgevingsvariabelen in drie scopes worden gedefinieerd:

  • Machine (of Systeem) scope
  • Gebruikerscope
  • Proces scope

De Proces scope bevat de omgevingsvariabelen die beschikbaar zijn in het huidige proces, of PowerShell sessie. Deze lijst met variabelen wordt geërfd van het ouderproces en is opgebouwd uit de variabelen in de Machine- enUser-scopes. Unix-gebaseerde platforms hebben alleen de Process scope.

U kunt de waarden van omgevingsvariabelen weergeven en wijzigen zonder gebruik te maken van een acmdlet door een variabele syntaxis te gebruiken met de omgevingsprovider. Om de waarde van een omgevingsvariabele weer te geven, gebruikt u de volgende syntaxis:

$Env:<variable-name>

Om bijvoorbeeld de waarde van de WINDIR omgevingsvariabele weer te geven, typt u de volgende opdracht op de PowerShell-opdrachtprompt:

$Env:windir

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

Wanneer u omgevingsvariabelen in PowerShell wijzigt, heeft de wijziging alleen gevolgen voor de huidige sessie. Dit gedrag lijkt op het gedrag van het Set commando in de Windows Command Shell en het Setenv commando in UNIX-gebaseerde omgevingen. Om waarden in de Machine of User scopes te wijzigen, moet u de methodes van de System.Environment klasse gebruiken.

Om wijzigingen in Machine-scoped variabelen aan te brengen, moet u ook toestemming hebben. Als u probeert een waarde te wijzigen zonder voldoende toestemming, mislukt de opdracht en geeft PowerShell een foutmelding.

U kunt de waarden van variabelen wijzigen zonder een cmdlet te gebruiken, met de volgende syntaxis:

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

Om bijvoorbeeld ;c:\temp toe te voegen aan de waarde van de omgevingsvariabele Path, gebruikt u de volgende syntaxis:

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

Op Linux of macOS scheidt de dubbele punt (:) in het commando het nieuwe pad van het pad dat er in de lijst aan voorafgaat.

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

U kunt ook de Item cmdlets gebruiken, zoals Set-ItemRemove-Item, enCopy-Item om de waarden van omgevingsvariabelen te wijzigen. Als u bijvoorbeeld het cmdlet Set-Item wilt gebruiken om ;c:\temp toe te voegen aan de waarde van de omgevingsvariabele Path, gebruikt u de volgende syntaxis:

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

In dit commando staat de waarde tussen haakjes, zodat deze als een eenheid wordt geïnterpreteerd.

Omgevingsvariabelen die voorkeuren opslaan

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

De omgevingsvariabelen waarin voorkeuren worden opgeslagen, zijn onder andere:

  • PSExecutionPolicyPreference

    Hierin wordt het uitvoeringsbeleid opgeslagen dat voor de huidige sessie is ingesteld. Deze omgevingsvariabele bestaat alleen wanneer u een uitvoeringsbeleid instelt voor een enkele 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 het cmdlet Set-ExecutionPolicy. Gebruik de parameter Scope met de waarde “Process”.

      Voor meer informatie, zie about_Execution_Policies.

  • 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 commando en wordt geschreven in een thread op de achtergrond ergens 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 standaard: ~/.cache/powershell

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

    Note

    Als het zoeken naar commando’s niet goed werkt, bijvoorbeeld als Intellisenses commando’s laat zien die niet bestaan, kunt u het cachebestand verwijderen. De cache wordt de volgende keer dat u PowerShell start opnieuw aangemaakt.

    Om de standaardlocatie van de cache te wijzigen, stelt u de omgevingsvariabele in voordat u PowerShell start. Wijzigingen in deze omgevingsvariabele zijn alleen van invloed op kinderprocessen. De waarde moet een volledig pad (inclusief bestandsnaam) zijn dat PowerShell toestemming geeft om bestanden te maken en te schrijven.

    Om de bestandscache uit te schakelen, 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'

    Dit stelt het pad in op het NUL-apparaat. PowerShell kan niet schrijven naar het pad, maar er wordt geen fout geretourneerd. U kunt de gerapporteerde fouten zien met atracer:

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

    Bij het wegschrijven van de module analyse cache 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 omgevingsvariabele in te stellen op 1.

    Het instellen van deze omgevingsvariabele treedt onmiddellijk in werking in het huidige proces.

  • PSModulePath

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

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

    • Systeemwijde locaties: Deze mappen bevatten modules die met PowerShell worden meegeleverd. De modules worden opgeslagen in de $PSHOME\Modules-locatie. Dit is ook de locatie waar de Windows beheermodules worden geïnstalleerd.

    • Gebruikersgeïnstalleerde modules: Dit zijn modules die door de gebruiker zijn geïnstalleerd.Install-Module heeft een parameter Scope waarmee u kunt opgeven of de module wordt geïnstalleerd voor de huidige gebruiker of voor alle gebruikers. Zie voor meer informatie Installeer-module.

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

    Bovendien kunnen setup programma’s die modules in andere directories installeren, zoals de Program Files directory, hun locaties toevoegen aan de waarde van$env:PSModulePath.

    Voor meer informatie, zie about_PSModulePath.

Omgevingsvariabelen beheren

PowerShell biedt verschillende methoden voor het beheren van omgevingsvariabelen.

  • De Environment provider drive
  • De Item cmdlets
  • De .NET System.Environment class
  • On Windows, het System Control Panel

De Environment provider gebruiken

Elke omgevingsvariabele wordt gerepresenteerd door een instantie van deSystem.Collections.DictionaryEntry class. In elk DictionaryEntry-object is de naam van de omgevingsvariabele de sleutel van het woordenboek. De waarde van de variabele is de woordenboekwaarde.

Om de eigenschappen en methoden weer te geven van het object dat een omgevingsvariabele in PowerShell vertegenwoordigt, gebruikt u het cmdlet Get-Member. Om bijvoorbeeld de methoden en eigenschappen van alle objecten in de Env:-schijf weer te geven, typt u:

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

Met de PowerShell Environment-provider hebt u toegang tot omgevingsvariabelen in een PowerShell-schijf (de Env:-schijf). Deze drive lijkt veel op een file systemdrive. Om naar de Env: drive te gaan, typt u:

Set-Location Env:

Gebruik de Content cmdlets om de waarden van een omgevingsvariabele op te halen of in te stellen.

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

U kunt de omgevingsvariabelen in het Env:-station bekijken vanaf elk ander PowerShell-station, en u kunt naar het Env:-station gaan om de omgevingsvariabelen te bekijken en te wijzigen.

Gebruik van item cmdlets

Wanneer u naar een omgevingsvariabele verwijst, typt u de Env: stationsnaam gevolgd door de naam van de variabele. Om bijvoorbeeld de waarde van deCOMPUTERNAME omgevingsvariabele weer te geven, typt u:

Get-ChildItem Env:Computername

Om de waarden van alle omgevingsvariabelen weer te geven, typt u:

Get-ChildItem Env:

Omdat omgevingsvariabelen geen child-items hebben, is de uitvoer van Get-Itemen Get-ChildItem hetzelfde.

De standaardinstelling is dat PowerShell de omgevingsvariabelen weergeeft in de volgorde waarin het ze heeft opgehaald. Als u de lijst met omgevingsvariabelen op variabelenaam wilt sorteren, leidt u de uitvoer van een Get-ChildItem commando naar het Sort-Object cmdlet. Typ bijvoorbeeld vanuit elk PowerShell-station:

Get-ChildItem Env: | Sort Name

U kunt ook naar het Env:-station gaan door het Set-Location cmdlet te gebruiken:

Set-Location Env:

Wanneer u in de Env: drive bent, kunt u de Env: drive-naam weglaten uit hetpath. Om bijvoorbeeld alle omgevingsvariabelen weer te geven, typt u:

PS Env:\> Get-ChildItem

Om de waarde van de COMPUTERNAME variabele weer te geven van binnen de Env:drive, typt u:

PS Env:\> Get-ChildItem ComputerName

Opslaan van wijzigingen in omgevingsvariabelen

Om een blijvende wijziging in een omgevingsvariabele onder Windows aan te brengen, gebruikt u hetSysteem Configuratiescherm. Selecteer Geavanceerde systeeminstellingen. Klik op het tabblad Geavanceerd op Omgevingsvariabele…. U kunt bestaande omgevingsvariabelen toevoegen of bewerken in de scopes Gebruiker en Systeem (Machine). Windows schrijft deze waarden naar het register, zodat ze behouden blijven voor sessies en systeemherstarts.

Aternatief kunt u omgevingsvariabelen toevoegen of wijzigen in uw PowerShell-profiel. Deze methode werkt voor elke versie van PowerShell op elk ondersteund platform.

Gebruik van System.Environment methods

De System.Environment class biedt GetEnvironmentVariable enSetEnvironmentVariable methods waarmee u het bereik van de variabele kunt specificeren.

Het volgende voorbeeld gebruikt de methode GetEnvironmentVariable om de machine-instelling van PSModulePath op te halen en de methode SetEnvironmentVariable om het C:\Program Files\Fabrikam\Modules-pad aan de waarde toe te voegen.

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

Voor meer informatie over de methoden van de klasse System.Environment, zieMilieumethoden.

Zie ook

  • Milieu (provider)
  • over_Modules

Geef een reactie

Het e-mailadres wordt niet gepubliceerd. Vereiste velden zijn gemarkeerd met *