about_Environment_Variables

Rövid leírás

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

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
  • P Standard kiadás xecutionPolicyPreference
  • PSModulePath
  • PSModuleAnalysisCachePath
  • PSDisableModuleAnalysisCacheCleanup

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

Hosszú leírás

A PowerShell bármely támogatott operációsrendszer-platformon elérheti és kezelheti a környezeti változókat. A PowerShell-környezetszolgá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.

Feljegyzés

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. Például különböző $env:Path$env:PATH 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ör az aktuális folyamatban vagy a 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 ésa felhasználó hatókörének változóiból jön létre.

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 set Windows command Shellben és a setenv UNIX-alapú környezetekben lévő parancs 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 környezeti változó értékének WINDIR 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, majd a változó nevét (windir) jelöli.

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élda:

"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 PowerShellben a környezeti változók nem állíthatók be üres sztringre. Ha egy környezeti változót egy üres sztringre $null állít be, az eltávolítja az aktuális munkamenetből. Példa:

$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 hiba történt, mert a környezeti változó el lett távolítva. Láthatja, hogy nem ad vissza hibát, ha üres sztringen használja:

'' | Get-Member -MemberType Properties
   TypeName: System.String

Name   MemberType Definition
----   ---------- ----------
Length Property   int Length {get;}

A PowerShell változóiról a about_Variables című témakörben talál további információt.

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

A PowerShell környezetszolgá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.

Ha például a környezeti változót a Foo következő Barértékkel szeretné létrehozni:

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

A környezeti változót a következővel Copy-Itemis másolhatja, beállíthatja egy környezeti változó Set-Itemértékét, listázhatja a környezeti változókat, Get-Itemés törölheti a környezeti változót a következővel 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 parancsmaggal megtekintheti a Get-ChildItem környezeti változók teljes listáját:

Get-ChildItem Env:

A környezeti változók kezelésével kapcsolatos további információkért tekintse meg a about_Environment_Provider.

A System.Environment metódusok használata

A System.Environment osztály a GetEnvironmentVariable és a SetEnvironmentVariable metódusokat biztosítja 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, Fooamelynek értéke Bar , majd visszaadja annak értékét.

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

A setEnvironmentVariable metódussal eltávolíthat egy környezeti változót úgy, hogy megad egy üres sztringet a változó értékéhez. Például a környezeti változó eltávolításához Foo :

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

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

Környezeti változók módosításainak mentése

Windows rendszeren három módszer létezik a környezeti változók állandó módosítására: ezek beállítása a profilban, a SetEnvironmentVariable metódus használata és a System Vezérlőpult használata.

Környezeti változók mentése 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'

Feljegyzés

Linux vagy macOS rendszeren a kettőspont () a kettőspont; (:) használatával választja el az új elérési utat a listában előtte lévő elérési úttól.

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

Környezeti változók mentése 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ó beállításához ebben a hatókörben. 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 Foo szeretne menteni a gép hatókörébe az értékkel Bar:

[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 mentése a Rendszer Vezérlőpult

A Rendszer Vezérlőpult meglévő környezeti változókat adhat hozzá vagy szerkeszthet a Felhasználó és a Rendszer (Gép) hatókörökben. 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őpult.
  2. Válassza a Rendszer lehetőséget.
  3. Válassza a Speciális rendszer Gépház lehetőséget.
  4. Lépjen a Speciális lapra.
  5. Környezeti változók kiválasztása ....
  6. Végezze el a módosításokat.

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ási vá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 a következőre true: , yesvagy 1.

    További információ: about_Telemetry.

  • 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ési értesítés viselkedése POWERSHELL_UPDATECHECK a környezeti változóval módosítható. A következő értékek támogatottak:

    • Off a frissítésértesítési funkció kikapcsolása
    • Default ugyanaz, mint a nem definiált POWERSHELL_UPDATECHECK:
      • A GA-kiadások értesítést küldenek a GA-kiadások frissítéséről
      • Az előzetes verziójú/RC-kiadások értesítést küldenek a ga és az előzetes verziójú kiadások frissítéséről
    • LTS csak a hosszú távú karbantartási (LTS) GA-kiadások frissítéseit értesíti

    További információ: about_Update_Notifications.

  • P Standard kiadás xecutionPolicyPreference

    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 a következő Processértékkel: .

      További információ: 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 hozzárendelt $env:PSModulePath 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 helyszínen 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-ModuleHatókör paraméterrel rendelkezik, 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. Az AllUsers hatókör helye a következő$env:ProgramFiles\PowerShell\Modules: .
      • Nem Windows rendszerű rendszereken a felhasználóspecifikus CurrentUser-hatókör helye a $HOME/.local/share/powershell/Modules mappa. Az AllUsers hatókör helye a következő/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 a helyüket az értékhez $env:PSModulePath.

    További információ: 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 a következő 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.

    Feljegyzés

    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. A környezeti változó módosításai csak a gyermekfolyamatokat érintik. 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 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 az 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 hibakódolóval jelentett hibák a következőkkel 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 a következőre 1állítja.

    A környezeti változó beállítása azonnal érvénybe lép az aktuális folyamatban.

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

Elérési út adatai

  • Elérési út

    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 és assoc parancsai ftype használatával. A PowerShell nem rendelkezik közvetlen módszerrel a fájlkezelő regisztrálásához. További információkért tekintse meg az ftype parancs dokumentációját.

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

  • 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 alapján.

    • 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ási sorozatok támogatása a KIFEJEZÉS vagy NO_COLOR környezeti változók használatával kapcsolható ki.

  • KIFEJEZÉS

    A viselkedés módosításának $env:TERM következő értékei az alábbiak szerint változnak:

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

    Ha $env:NO_COLOR létezik, akkor $PSStyle.OutputRendering egyszerű szövegre van állítva. További információ a NO_COLOR környezeti változóról: https://no-color.org/.

Lásd még