környezeti változókról

Rövid leírás

Ismerteti, hogyan érheti el és kezelheti a környezeti változókat a PowerShellben.

Hosszú leírás

A környezeti változók az operációs rendszer és más programok által használt adatokat tárolják. A PowerShell a következő környezeti változókat hozza létre:

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

Ezeknek a változóknak a teljes leírását a cikk PowerShell-környezeti változókban találja.

A PowerShell bármely támogatott operációsrendszer-platformon elérheti és kezelheti a környezeti változókat. A PowerShell Környezeti szolgáltató lehetővé teszi a környezeti változók lekérését, hozzáadását, módosítását, törlését és törlését az aktuális konzolon.

Jegyzet

A Windowstól eltérően a környezeti változók neve macOS és Linux rendszeren megkülönbözteti a kis- és nagybetűket. A $Env:Path és a $Env:PATH például különböző környezeti változók nem Windows-platformokon.

A környezeti változók a PowerShell más változótípusaival ellentétben mindig sztringekként vannak tárolva. A többi változótól eltérően a gyermekfolyamatok öröklik őket, például a helyi háttérfeladatok és a modultagok által futtatott munkamenetek. Így a környezeti változók jól használhatók a szülő- és gyermekfolyamatokban szükséges értékek tárolásához.

Windows rendszeren a környezeti változók három hatókörben határozhatók meg:

  • Gép (vagy rendszer) hatóköre
  • Felhasználói hatókör
  • Folyamat hatóköre

A folyamat hatóköre az aktuális folyamatban vagy PowerShell-munkamenetben elérhető környezeti változókat tartalmazza. A változók listája a szülőfolyamattól öröklődik, és a Gép és Felhasználói hatókörök változóiból épül fel.

Ha módosítja a környezeti változókat a PowerShellben, a módosítás csak az aktuális munkamenetre lesz hatással. Ez a viselkedés hasonlít a Windows command Shell set parancsának és a Unix-alapú setenv parancsnak a viselkedésére. A gép vagy a felhasználói hatókör értékeinek módosításához a System.Environment osztály metódusait kell használnia.

A gépi hatókörű változók módosításához rendelkeznie kell engedéllyel is. Ha megfelelő engedély nélkül próbál módosítani egy értéket, a parancs meghiúsul, és a PowerShell hibát jelenít meg.

A PowerShell számos különböző módszert kínál a környezeti változók használatára és kezelésére.

  • A változó szintaxisa
  • A környezetszolgáltató és az elem parancsmagjai
  • A .NET System.Environment osztály

A változó szintaxisának használata

A környezeti változók értékeit az alábbi szintaxissal jelenítheti meg és módosíthatja:

$Env:<variable-name>

Például a windir környezeti változó értékének megjelenítéséhez:

$Env:windir
C:\Windows

Ebben a szintaxisban a dollárjel ($) egy változót, a meghajtó neve (Env:) pedig egy környezeti változót jelöl, amelyet a változó neve (windir) követ.

A környezeti változók értékét az alábbi szintaxissal hozhatja létre és frissítheti:

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

Például a Foo környezeti változó létrehozásához:

$Env:Foo = 'An example'

Mivel a környezeti változók mindig sztringek, használhatja őket, mint bármely más, sztringet tartalmazó változót. Például:

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

An example!

A PowerShell 7.5-től kezdve egy környezeti változót üres sztringre állíthat be. Környezeti változó beállítása, hogy $null eltávolítsa azt az aktuális munkamenetből. Például:

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.

További információ a PowerShell változóiról: about_Variables.

A Környezetszolgáltató és az Elem parancsmagok használata

A PowerShell Környezeti szolgáltatója lehetővé teszi a környezeti változók fájlrendszer-meghajtóhoz hasonló formátumban történő használatát. Lehetővé teszi környezeti változók és értékek lekérését, hozzáadását, módosítását, törlését és törlését a PowerShellben.

Például a Foo környezeti változó létrehozása Barértékkel:

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

A környezeti változót átmásolhatja a Copy-Item, beállíthatja egy környezeti változó értékét Set-Item, listázhatja a környezeti változókat Get-Item, és törölheti a környezeti változót 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".

A Get-ChildItem parancsmaggal megtekintheti a környezeti változók teljes listáját:

Get-ChildItem Env:

A PowerShell 7.5-től kezdve egy környezeti változót egy üres sztringre állíthat be a környezetszolgáltató és Set-Item a parancsmag használatával. Környezeti változó beállítása, hogy $null eltávolítsa azt az aktuális munkamenetből. Például:

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.

A környezeti változók kezeléséhez a Környezeti szolgáltató használatával kapcsolatos további információkért lásd: about_Environment_Provider.

A System.Environment metódusok használata

A System.Environment osztály GetEnvironmentVariable() és SetEnvironmentVariable() metódusokat biztosít a környezeti változók lekéréséhez és módosításához.

Az alábbi példa létrehoz egy új környezeti változót Foo, amelynek értéke Bar, majd visszaadja az értékét.

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

A PowerShell 7.5-től kezdve egy környezeti változót üres sztringre állíthat be a SetEnvironmentVariable() metódussal, és megadhat egy üres sztringet vagy $null a változó értékét. Például:

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

Jegyzet

A változó szintaxisával és a szolgáltatói esetekkel ellentétben az érték metódushoz $nullSetEnvironmentVariable() való hozzárendelése nem távolítja el a környezeti változót.

A System.Environment osztály metódusairól további információt Környezeti módszerekcímű témakörben talál.

Állandó környezeti változók létrehozása a Windowsban

Windows rendszeren három módszer létezik egy környezeti változó állandó módosítására:

  • Beállítás a profilban
  • A SetEnvironmentVariable() metódus használata
  • A Rendszer vezérlőpultjának használata

Környezeti változók beállítása a profilban

A PowerShell-profilban hozzáadott vagy módosított környezeti változók minden olyan munkamenetben elérhetők, amely betölti a profilját. Ez a módszer a PowerShell bármely verziójához használható bármely támogatott platformon.

Ha például létre szeretné hozni a CompanyUri környezeti változót, és frissíteni szeretné a PATH környezeti változót, hogy belefoglalja a C:\Tools mappát, adja hozzá a következő sorokat a PowerShell-profilhoz:

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

Jegyzet

Linux vagy macOS rendszeren a kettőspontot (:) használjuk a kettőspont (;) helyett, hogy elválasztsunk egy új elérési utat a lista előtt lévő elérési úttól.

A PowerShell-profil elérési útját az $PROFILE automatikus változóval szerezheti be. További információ a profilokról: about_Profiles.

Környezeti változók beállítása a SetEnvironmentVariable() használatával

Windows rendszeren megadhat egy hatókört a SetEnvironmentVariable() metódushoz harmadik paraméterként a környezeti változó ebben a hatókörben való beállításához. A gép és a felhasználói hatókörök is az aktuális folyamaton kívül maradnak, így új vagy módosított környezeti változót menthet.

Ha például egy új környezeti változót szeretne menteni Foo a gép hatókörébe Barértékkel:

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

A környezeti változókat törölheti a felhasználó vagy a gép hatóköréből úgy, hogy a változó értékét üres sztringre állítja.

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

Környezeti változók beállítása a System Vezérlőpulton

A Rendszervezérlő panelen hozzáadhat vagy szerkeszthet meglévő környezeti változókat a Felhasználói és Rendszer (Gép) hatóköreiben. A Windows ezeket az értékeket a beállításjegyzékbe írja, hogy azok a munkamenetek és a rendszer újraindítása során is megmaradjanak.

Környezeti változó állandó módosítása Windows rendszeren a System Vezérlőpult használatával:

  1. Nyissa meg a Rendszer vezérlőpultját.
  2. Válassza Rendszerlehetőséget.
  3. Válassza Speciális rendszerbeállításoklehetőséget.
  4. Lépjen a Speciális lapra.
  5. Válassza Környezeti változók...lehetőséget.
  6. Végezze el a módosításokat.

Állandó környezeti változók létrehozása nem Windows-platformokon

Linux és macOS konfigurációs fájlokkal és szkriptekkel rendelkezik, amelyeket az operációs rendszer a környezeti változók beállításához használ az alkalmazás indítása előtt.

Ha a PowerShellt alapértelmezett (bejelentkezési) rendszerhéjként futtatja, környezeti változókat határozhat meg az operációs rendszer által támogatott globális inicializálási fájlokban. Linuxon például hozzáadhat környezeti változókat a /etc/environment fájlhoz, vagy létrehozhat egy szkriptet, amely beállítja a környezeti változókat, és elhelyezi azt a /etc/profile.d mappában. MacOS rendszeren környezeti változókat adhat hozzá a /etc/profile fájlhoz.

Ha egy másik rendszerhéjból indítja el a PowerShellt, környezeti változókat határozhat meg a nem bejelentkezési rendszerhéjak által használt rendszerhéj-specifikus inicializálási fájlokban, például ~/.bashrcbash vagy ~/.zshrczsh.

További információkért tekintse meg az operációs rendszer és a parancsértelmező saját dokumentációját.

PowerShell-környezeti változók

A PowerShell-funkciók környezeti változókkal tárolhatják a felhasználói beállításokat. Ezek a változók a beállításváltozókhoz hasonlóan működnek, de a létrehozásukhoz használt munkamenetek gyermek munkamenetei öröklik őket. A beállításváltozókkal kapcsolatos további információkért lásd: about_Preference_Variables.

A beállításokat tároló környezeti változók a következők:

  • POWERSHELL_TELEMETRY_OPTOUT

    A telemetria kikapcsolásához állítsa a környezeti változót true, yesvagy 1értékre. További információkért lásd a(z) about_Telemetryelemet.

    Ahhoz, hogy ez a környezeti változó érvénybe lépjen, a PowerShell-folyamat megkezdése előtt be kell állítani. Az állandó környezeti változók létrehozásával kapcsolatos információkért tekintse meg az előző szakaszokat.

  • POWERSHELL_DISTRIBUTION_CHANNEL

    A PowerShell 7.2-től kezdődően ezt a környezeti változót a telepítőcsomagok állítják be a PowerShell telepítési módjának és forrásának rögzítéséhez.

    Ezeket az információkat a Microsoftnak küldött telemetriai adatok tartalmazzák. A felhasználóknak nem szabad megváltoztatniuk ezt az értéket.

  • POWERSHELL_UPDATECHECK

    A frissítésértesítés viselkedése a POWERSHELL_UPDATECHECK környezeti változóval módosítható. További tájékoztatásért tekintse meg: about_Update_Notifications.

    A következő értékek támogatottak:

    • Off kikapcsolja a frissítésértesítési funkciót
    • Default ugyanaz, mint ha nincs meghatározva a POWERSHELL_UPDATECHECK:
      • A GA-kiadásokról szóló értesítések tájékoztatják a GA-kiadások frissítéséről
      • Az előzetes verziójú és RC-kiadások értesítést küldenek a GA és az előzetes kiadások frissítéseiről.
    • LTS csak a hosszú távú karbantartási (LTS) GA-kiadások frissítéseit értesíti

    A környezeti változó nem alapértelmezett értékeit be kell állítani a PowerShell-folyamat megkezdése előtt. Az állandó környezeti változók létrehozásával kapcsolatos információkért tekintse meg az előző szakaszokat.

  • POWERSHELL_DIAGNOSTICS_OPTOUT

    Ez a környezeti változó a PowerShell 7.6-preview.5-ben lett hozzáadva. Alapértelmezés szerint a PowerShell létrehoz egy elnevezett csövet, amelyet az IPC-hez (IPC) használnak, például Enter-PSHostProcess. A PowerShell indításkor létrehozza a megnevezett csövet, hogy szükség esetén használható legyen.

    A nem Windows-platformokon a nevesített csövek fájlként vannak implementálva a /tmp mappában. Ha a PowerShell összeomlik, előfordulhat, hogy ezek a fájlok nem törlődnek. Idővel ezek a fájlok felhalmozódhatnak.

    A PowerShell 7.6-tól POWERSHELL_DIAGNOSTICS_OPTOUT kezdve a következőre falsevan állítva: . A nevesített cső létrehozásának kikapcsolásához állítsa a környezeti változót a következőre true: , yesvagy 1.

  • PSExecutionPolicyPreference

    Az aktuális munkamenethez beállított végrehajtási szabályzatot tárolja. Ez a környezeti változó csak akkor létezik, ha egy végrehajtási szabályzatot állít be egyetlen munkamenethez. Ezt kétféleképpen teheti meg.

    • Indítsa el a munkamenetet a parancssorból a ExecutionPolicy paraméterrel a munkamenet végrehajtási szabályzatának beállításához.

    • Használja a Set-ExecutionPolicy parancsmagot. Használja a Hatókör paramétert Processértékkel.

    • Állítsa be manuálisan a környezeti változót. A változó értékének módosítása megváltoztatja az aktuális folyamat végrehajtási szabályzatát.

    Ezek az információk csak a Windows platformra vonatkoznak. További információkért lásd: about_Execution_Policies.

  • PSModulePath

    A $Env:PSModulePath környezeti változó a modulok és erőforrások keresésére keresendő mappahelyek listáját tartalmazza. Windows rendszeren a mappahelyek listáját a kettőspont (;) karakter választja el egymástól. Nem Windows-platformokon a kettőspont (:) elválasztja a mappahelyeket a környezeti változóban.

    Alapértelmezés szerint a $Env:PSModulePath hozzárendelt tényleges helyek a következők:

    • Rendszerszintű helyek: Ezek a mappák a PowerShell-lel szállított modulokat tartalmazzák. A modulok a $PSHOME\Modules helyen vannak tárolva. Ezen a helyen települnek a Windows felügyeleti moduljai is.

    • Felhasználó által telepített modulok: Ezek a felhasználó által telepített modulok. Install-Module rendelkezik egy Hatókör paraméterrel, amely lehetővé teszi annak megadását, hogy a modul telepítve van-e az aktuális felhasználóra vagy az összes felhasználóra. További információ: Install-Module.

      • Windows rendszeren a felhasználóspecifikus CurrentUser hatókör helye a $HOME\Documents\PowerShell\Modules mappa. A AllUsers hatókör helye $Env:ProgramFiles\PowerShell\Modules.
      • Nem Windows rendszerű rendszereken a felhasználóspecifikus CurrentUser hatókör helye a $HOME/.local/share/powershell/Modules mappa. A AllUsers hatókör helye /usr/local/share/powershell/Modules.

    Emellett a más könyvtárakban modulokat telepítő programok, például a Program Files könyvtár is hozzáfűzhetik helyüket a $Env:PSModulePathértékéhez.

    További információért lásd: about_PSModulePath.

  • PSModuleAnalysisCachePath

    A PowerShell szabályozza a modulok és parancsmagjaik adatainak gyorsítótárazásához használt fájlt. A gyorsítótár a parancsok keresésekor indul el, és a modul importálása után valamikor háttérszálon lesz megírva.

    A gyorsítótár alapértelmezett helye a következő:

    • Windows PowerShell 5.1: $Env:LOCALAPPDATA\Microsoft\Windows\PowerShell
    • PowerShell 6.0 és újabb verziók: $Env:LOCALAPPDATA\Microsoft\PowerShell
    • Nem Windows alapértelmezett: ~/.cache/powershell

    A gyorsítótár alapértelmezett fájlneve ModuleAnalysisCache. Ha több PowerShell-példány is telepítve van, a fájlnév tartalmaz egy hexadecimális utótagot, hogy telepítésenként egyedi fájlnév legyen.

    Jegyzet

    Ha a parancsfelderítés nem működik megfelelően, például az IntelliSense nem létező parancsokat jelenít meg, törölheti a gyorsítótárfájlt. A gyorsítótár újra létrejön a PowerShell következő indításakor.

    A gyorsítótár alapértelmezett helyének módosításához állítsa be a környezeti változót a PowerShell indítása előtt. Az értéknek el kell neveznie egy teljes elérési utat (beleértve a fájlnevet), amelyet a PowerShell jogosult fájlok létrehozására és írására.

    A környezeti változó módosításai csak a gyermekfolyamatokat érintik. Az állandó környezeti változók létrehozásával kapcsolatos információkért tekintse meg az előző szakaszokat.

    A fájlgyorsítótár letiltásához állítsa ezt az értéket érvénytelen helyre, például:

    # `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'
    

    Ezzel beállítja a NUL eszköz elérési útját. A PowerShell nem tud írni az elérési útra, de a hibaüzenet nem jelenik meg. A hibák a nyomkövető segítségével láthatók:

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

    A modulelemzési gyorsítótár írásakor a PowerShell ellenőrzi a már nem létező modulokat, hogy elkerülje a szükségtelenül nagy gyorsítótárat. Néha ezek az ellenőrzések nem kívánatosak, ilyenkor kikapcsolhatja őket úgy, hogy ezt a környezeti változó értékét 1értékre állítja.

    A környezeti változó beállítása az aktuális folyamat későbbi törlési eseményeinél lép érvénybe. Annak érdekében, hogy a törlés indításkor le legyen tiltva, be kell állítania a környezeti változót a PowerShell indítása előtt. Az állandó környezeti változók létrehozásával kapcsolatos információkért tekintse meg az előző szakaszokat.

A PowerShell által használt egyéb környezeti változók

Elérési út adatai

  • PATH

    A $Env:PATH környezeti változó tartalmazza azoknak a mappahelyeknek a listáját, amelyeket az operációs rendszer végrehajtható fájlokra keres. Windows rendszeren a mappahelyek listáját a kettőspont (;) karakter választja el egymástól. Nem Windows-platformokon a kettőspont (:) elválasztja a mappahelyeket a környezeti változóban.

  • PATHEXT

    A $Env:PATHEXT változó tartalmazza azon fájlkiterjesztések listáját, amelyeket a Windows végrehajtható fájloknak tekint. Ha a PowerShell-lel végrehajt egy szkriptfájlt a felsorolt bővítmények egyikével, a szkript az aktuális konzolon vagy terminálmunkamenetben fut. Ha a fájlkiterjesztés nem szerepel a listában, a szkript egy új konzolmunkamenetben fut.

    Annak érdekében, hogy egy másik szkriptnyelv szkriptjei fussanak az aktuális konzolmunkamenetben, adja hozzá a szkriptnyelv által használt fájlkiterjesztést. Ha például Python-szkripteket szeretne futtatni az aktuális konzolon, adja hozzá a .py bővítményt a környezeti változóhoz. Ahhoz, hogy a Windows végrehajtható fájlként támogassa a .py bővítményt, regisztrálnia kell a fájlkiterjesztést a CMD parancshéj ftype és assoc parancsaival. A PowerShell nem rendelkezik közvetlen módszerrel a fájlkezelő regisztrálásához. További információt a ftype parancs dokumentációjában talál.

    A PowerShell-szkriptek mindig az aktuális konzol munkamenetben kezdődnek. Nem kell hozzáadnia a .ps1 bővítményt.

  • XDG változók

    Nem Windows-platformokon a PowerShell a következő XDG környezeti változókat használja az XDG Alapkönyvtár specifikációja.

    • XDG_CONFIG_HOME
    • XDG_DATA_HOME
    • XDG_CACHE_HOME

Terminálfunkciók

A PowerShell 7.2-től kezdve a következő környezeti változók használhatók a virtuális terminál olyan funkcióinak szabályozására, mint például a kimenetet színező ANSI-feloldó szekvenciák. Az ANSI-feloldósorozatok támogatása kikapcsolható a TERM vagy NO_COLOR környezeti változók használatával.

  • TERM

    A $Env:TERM alábbi értékei az alábbiak szerint módosítják a viselkedést:

    • dumb$Host.UI.SupportsVirtualTerminal = $false beállítása
    • xterm-mono$PSStyle.OutputRendering = PlainText beállítása
    • xterm$PSStyle.OutputRendering = PlainText beállítása
  • NO_COLOR

    Ha $Env:NO_COLOR létezik, akkor $PSStyle.OutputRenderingPlainTextértékre van állítva. A NO_COLOR környezeti változóval kapcsolatos további információkért lásd: https://no-color.org/.

Lásd még