about_Environment_Variables

Krátký popis

Popisuje, jak v PowerShellu přistupovat k proměnným prostředí a spravovat je.

Proměnné prostředí ukládají data, která používají operační systém a další programy. PowerShell vytvoří následující proměnné prostředí:

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

Úplný popis těchto proměnných najdete v proměnných prostředí PowerShellu v tomto článku.

Dlouhý popis

PowerShell může přistupovat k proměnným prostředí a spravovat je v libovolné z podporovaných platforem operačního systému. Zprostředkovatel prostředí PowerShell umožňuje získat, přidat, změnit, vymazat a odstranit proměnné prostředí v aktuální konzole.

Poznámka:

Na rozdíl od Windows rozlišují názvy proměnných prostředí v systémech macOS a Linux malá a velká písmena. Například $env:Path různé $env:PATH proměnné prostředí na platformách jiných než Windows.

Proměnné prostředí, na rozdíl od jiných typů proměnných v PowerShellu, se vždy ukládají jako řetězce. Na rozdíl od jiných proměnných jsou zděděné podřízenými procesy, jako jsou místní úlohy na pozadí a relace, ve kterých členové modulu běží. Díky tomu jsou proměnné prostředí vhodné pro ukládání hodnot potřebných v nadřazených i podřízených procesech.

Ve Windows lze proměnné prostředí definovat ve třech oborech:

  • Rozsah počítače (nebo systému)
  • Obor uživatele
  • Rozsah procesu

Obor Proces obsahuje proměnné prostředí dostupné v aktuálním procesu nebo relaci PowerShellu. Tento seznam proměnných je zděděný z nadřazeného procesu a je vytvořen z proměnných v oborech počítače a uživatele .

Když v PowerShellu změníte proměnné prostředí, ovlivní tato změna pouze aktuální relaci. Toto chování se podobá chování set příkazu v příkazovém prostředí systému Windows a setenv příkazu v prostředích se systémem UNIX. Chcete-li změnit hodnoty v oboru počítače nebo uživatele, je nutné použít metody Třídy System.Environment .

Pokud chcete provádět změny proměnných v oboru počítače, musíte mít také oprávnění. Pokud se pokusíte změnit hodnotu bez dostatečného oprávnění, příkaz selže a PowerShell zobrazí chybu.

PowerShell nabízí několik různých metod pro použití a správu proměnných prostředí.

  • Syntaxe proměnné
  • Rutiny zprostředkovatele prostředí a položky
  • Třída .NET System.Environment

Použití syntaxe proměnné

Hodnoty proměnných prostředí můžete zobrazit a změnit pomocí následující syntaxe:

$Env:<variable-name>

Pokud například chcete zobrazit hodnotu WINDIR proměnné prostředí:

$Env:windir
C:\Windows

V této syntaxi znak dolaru ($) označuje proměnnou a název jednotky (Env:) označuje proměnnou prostředí následovanou názvem proměnné (windir).

Hodnotu proměnných prostředí můžete vytvořit a aktualizovat pomocí následující syntaxe:

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

Pokud chcete například vytvořit proměnnou Foo prostředí:

$Env:Foo = 'An example'

Vzhledem k tomu, že proměnné prostředí jsou vždy řetězce, můžete je použít stejně jako jakoukoli jinou proměnnou obsahující řetězec. Příklad:

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

An example!

V PowerShellu nelze proměnnou prostředí nastavit na prázdný řetězec. Nastavení proměnné prostředí na $null nebo prázdný řetězec ho odebere z aktuální relace. Příklad:

$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 vrátila chybu, protože byla odebrána proměnná prostředí. Uvidíte, že nevrátí chybu, když ji použijete u prázdného řetězce:

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

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

Další informace o proměnných v PowerShellu najdete v tématu about_Variables.

Použití rutin zprostředkovatele prostředí a položky

Poskytovatel prostředí PowerShellu poskytuje rozhraní pro interakci s proměnnými prostředí ve formátu, který se podobá jednotce systému souborů. Umožňuje získat, přidat, změnit, vymazat a odstranit proměnné prostředí a hodnoty v PowerShellu.

Pokud chcete například vytvořit Foo proměnnou prostředí s hodnotou Bar:

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

Proměnnou prostředí můžete také zkopírovat pomocí Copy-Item, nastavit hodnotu proměnné prostředí pomocí Set-Item, vypsat proměnné prostředí s Get-Itema odstranit proměnnou prostředí pomocí 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".

Pomocí rutiny Get-ChildItem zobrazíte úplný seznam proměnných prostředí:

Get-ChildItem Env:

Další informace o použití zprostředkovatele prostředí ke správě proměnných prostředí najdete v tématu about_Environment_Provider.

Použití metod System.Environment

Třída System.Environment poskytuje GetEnvironmentVariable() a SetEnvironmentVariable() metody pro získání a úpravu proměnných prostředí.

Následující příklad vytvoří novou proměnnou prostředí , Foos hodnotou Bar a poté vrátí její hodnotu.

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

Proměnnou SetEnvironmentVariable() prostředí můžete pomocí metody odebrat zadáním prázdného řetězce pro hodnotu proměnné. Pokud chcete například odebrat proměnnou Foo prostředí:

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

Další informace o metodách třídy System.Environment naleznete v tématu Metody prostředí.

Vytváření trvalých proměnných prostředí ve Windows

Ve Windows existují tři metody pro provedení trvalé změny proměnné prostředí:

  • Nastavení v profilu
  • SetEnvironmentVariable() Použití metody
  • Použití systémového Ovládací panely

Nastavení proměnných prostředí ve vašem profilu

Jakákoli proměnná prostředí, kterou přidáte nebo změníte v profilu PowerShellu, je dostupná v jakékoli relaci, která načte váš profil. Tato metoda funguje pro libovolnou verzi PowerShellu na libovolné podporované platformě.

Pokud chcete například vytvořit proměnnou CompanyUri prostředí a aktualizovat Path proměnnou prostředí tak, aby zahrnovala C:\Tools složku, přidejte do profilu PowerShellu následující řádky:

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

Poznámka:

V Linuxu nebo macOS se místo středníku () použije dvojtečka (:;) k oddělení nové cesty od cesty, která předchází v seznamu.

Cestu k profilu PowerShellu můžete získat pomocí $PROFILE automatické proměnné. Další informace o profilech najdete v tématu about_Profiles.

Nastavení proměnných prostředí pomocí SetEnvironmentVariable()

Ve Windows můžete jako třetí parametr zadat obor metody SetEnvironmentVariable() , který nastaví proměnnou prostředí v daném oboru. Obory počítačů i uživatelů se uchovávají mimo aktuální proces a umožňují uložit novou nebo změněnou proměnnou prostředí.

Pokud chcete například uložit novou proměnnou Foo prostředí s hodnotou Bardo oboru počítače:

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

Proměnnou prostředí můžete odstranit z oboru uživatele nebo počítače nastavením hodnoty proměnné na prázdný řetězec.

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

Nastavení proměnných prostředí v systémovém Ovládací panely

V Ovládací panely systému můžete přidat nebo upravit existující proměnné prostředí v oborech User and System (počítač). Systém Windows tyto hodnoty zapíše do registru, aby se zachovaly napříč relacemi a restartováním systému.

Pokud chcete provést trvalou změnu proměnné prostředí ve Windows pomocí systémového Ovládací panely:

  1. Otevřete systémovou Ovládací panely.
  2. Vyberte Systém.
  3. Vyberte Upřesnit nastavení systému.
  4. Přejděte na kartu Upřesnit .
  5. Vyberte proměnné prostředí....
  6. Proveďte změny.

Vytváření trvalých proměnných prostředí na platformách mimo Windows

Linux a macOS mají konfigurační soubory a skripty, které operační systém používá k nastavení proměnných prostředí před spuštěním aplikace.

Při spuštění PowerShellu jako výchozího prostředí (přihlášení) můžete definovat proměnné prostředí v souborech globální inicializace podporované operačním systémem. Například v Linuxu /etc/environment můžete do souboru přidat proměnné prostředí nebo vytvořit skript, který nastaví proměnné prostředí a vloží je do /etc/profile.d složky. V systému macOS můžete do /etc/profile souboru přidat proměnné prostředí.

Při spuštění PowerShellu z jiného prostředí můžete definovat proměnné prostředí v inicializačních souborech specifických pro prostředí, které používají prostředí bez přihlášení, například ~/.bashrc pro bash nebo ~/.zshrc pro zsh.

Další informace najdete v dokumentaci k operačnímu systému a výchozímu prostředí.

Proměnné prostředí PowerShellu

Funkce PowerShellu můžou používat proměnné prostředí k ukládání uživatelských předvoleb. Tyto proměnné fungují jako proměnné předvoleb, ale dědí se podřízenými relacemi relací, ve kterých se vytvářejí. Další informace o proměnných předvoleb najdete v tématu about_Preference_Variables.

Mezi proměnné prostředí, které ukládají předvolby, patří:

  • POWERSHELL_TELEMETRY_OPTOUT

    Pokud chcete vyjádřit nesouhlas s telemetrií, nastavte proměnnou prostředí na true, yesnebo 1. Další informace najdete v tématu about_Telemetry.

    Aby tato proměnná prostředí měla vliv, musí být nastavená před spuštěním procesu PowerShellu. Informace o vytváření trvalých proměnných prostředí najdete v předchozích částech.

  • POWERSHELL_DISTRIBUTION_CHANNEL

    Počínaje PowerShellem 7.2 je tato proměnná prostředí nastavená instalačními balíčky tak, aby zaznamenávala metodu a zdroj instalace pro PowerShell.

    Tyto informace jsou součástí telemetrických dat odesílaných Do Microsoftu. Uživatelé by tuto hodnotu neměli měnit.

  • POWERSHELL_UPDATECHECK

    Chování oznámení o aktualizaci lze změnit pomocí POWERSHELL_UPDATECHECK proměnné prostředí. Další informace najdete v tématu about_Update_Notifications.

    Podporovány jsou následující hodnoty:

    • Off vypne funkci oznámení o aktualizaci.
    • Default je stejná jako definice POWERSHELL_UPDATECHECK:
      • Verze ga informují o aktualizacích vydaných verzí ga
      • Verze Preview/RC upozorňují na aktualizace verze GA a verze Preview.
    • LTS upozorní pouze na aktualizace dlouhodobé údržby (LTS) verze GA.

    Před spuštěním procesu PowerShellu je nutné nastavit jiné než výchozí hodnoty proměnné prostředí. Informace o vytváření trvalých proměnných prostředí najdete v předchozích částech.

  • PSExecutionPolicyPreference

    Uloží zásadu spouštění nastavenou pro aktuální relaci. Tato proměnná prostředí existuje pouze v případě, že nastavíte zásady spouštění pro jednu relaci. Můžete to udělat dvěma různými způsoby.

    • Spusťte relaci z příkazového řádku pomocí parametru ExecutionPolicy a nastavte zásady spouštění relace.

    • Použijte rutinu Set-ExecutionPolicy . Použijte parametr Scope s hodnotou Process.

    • Ručně nastavte proměnnou prostředí. Změna hodnoty této proměnné změní zásady provádění aktuálního procesu.

    Tyto informace platí jenom pro platformu Windows. Další informace najdete v tématu about_Execution_Policies.

  • PSModulePath

    $env:PSModulePath Proměnná prostředí obsahuje seznam umístění složek, ve kterých se hledají moduly a prostředky. Ve Windows je seznam umístění složek oddělený středníkem (;) znakem. Na jiných platformách než Windows odděluje dvojtečka (:) umístění složek v proměnné prostředí.

    Ve výchozím nastavení jsou efektivní umístění přiřazená $env:PSModulePath :

    • Systémová umístění: Tyto složky obsahují moduly, které jsou dodávány pomocí PowerShellu. Moduly se ukládají do $PSHOME\Modules umístění. Toto je také umístění, kde jsou nainstalované moduly pro správu Systému Windows.

    • Moduly nainstalované uživatelem: Jedná se o moduly nainstalované uživatelem. Install-Modulemá parametr Scope, který umožňuje určit, zda je modul nainstalován pro aktuálního uživatele nebo pro všechny uživatele. Další informace naleznete v tématu Install-Module.

      • Umístění oboru CurrentUser specifické pro uživatele ve Windows je $HOME\Documents\PowerShell\Modules složka. Umístění oboru AllUsers je $env:ProgramFiles\PowerShell\Modules.
      • V systémech, které nejsou systémy Windows, je umístění oboru CurrentUser specifické pro $HOME/.local/share/powershell/Modules uživatele. Umístění oboru AllUsers je /usr/local/share/powershell/Modules.

    Kromě toho instalační programy, které instalují moduly v jiných adresářích, například v adresáři Program Files, mohou připojit jejich umístění k hodnotě $env:PSModulePath.

    Další informace najdete v tématu about_PSModulePath.

  • PSModuleAnalysisCachePath

    PowerShell poskytuje kontrolu nad souborem, který slouží k ukládání dat o modulech a jejich rutinách do mezipaměti. Mezipaměť se při spuštění přečte při hledání příkazu a zapíše se do vlákna na pozadí někdy po importu modulu.

    Výchozí umístění mezipaměti je:

    • Windows PowerShell 5.1: $env:LOCALAPPDATA\Microsoft\Windows\PowerShell
    • PowerShell 6.0 a novější: $env:LOCALAPPDATA\Microsoft\PowerShell
    • Výchozí nastavení jiného systému než Windows: ~/.cache/powershell

    Výchozí název souboru mezipaměti je ModuleAnalysisCache. Pokud máte nainstalovaných více instancí PowerShellu, bude název souboru obsahovat šestnáctkovou příponu, aby každý instalační soubor obsahoval jedinečný název souboru.

    Poznámka:

    Pokud zjišťování příkazů nefunguje správně, například IntelliSense zobrazuje příkazy, které neexistují, můžete odstranit soubor mezipaměti. Mezipaměť se znovu vytvoří při příštím spuštění PowerShellu.

    Pokud chcete změnit výchozí umístění mezipaměti, nastavte proměnnou prostředí před spuštěním PowerShellu. Hodnota by měla pojmenovat úplnou cestu (včetně názvu souboru), kterou má PowerShell oprávnění k vytváření a zápisu souborů.

    Změny této proměnné prostředí ovlivňují pouze podřízené procesy. Informace o vytváření trvalých proměnných prostředí najdete v předchozích částech.

    Pokud chcete zakázat mezipaměť souborů, nastavte tuto hodnotu na neplatné umístění, například:

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

    Tím se nastaví cesta k zařízení NUL . PowerShell nemůže zapisovat do cesty, ale nevrátí se žádná chyba. Chyby hlášené pomocí traceru můžete zobrazit:

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

    Při zápisu mezipaměti analýzy modulů PowerShell kontroluje moduly, které už neexistují, aby nedocházelo k zbytečně velké mezipaměti. Někdy tyto kontroly nejsou žádoucí, v takovém případě je můžete vypnout nastavením této hodnoty proměnné prostředí na 1hodnotu .

    Nastavení této proměnné prostředí se projeví u následných událostí čištění v aktuálním procesu. Pokud chcete zajistit, aby bylo čištění při spuštění zakázané, musíte před spuštěním PowerShellu nastavit proměnnou prostředí. Informace o vytváření trvalých proměnných prostředí najdete v předchozích částech.

Další proměnné prostředí používané prostředím PowerShell

Informace o cestě

  • PATH

    $env:PATH Proměnná prostředí obsahuje seznam umístění složek, která operační systém hledá spustitelné soubory. Ve Windows je seznam umístění složek oddělený středníkem (;) znakem. Na jiných platformách než Windows odděluje dvojtečka (:) umístění složek v proměnné prostředí.

  • PATHEXT

    Proměnná $env:PATHEXT obsahuje seznam přípon souborů, které systém Windows považuje za spustitelné soubory. Když se soubor skriptu s jednou z uvedených rozšíření spustí z PowerShellu, skript se spustí v aktuální konzole nebo relaci terminálu. Pokud není přípona souboru uvedená, skript se spustí v nové relaci konzoly.

    Chcete-li zajistit, aby se skripty pro jiný skriptovací jazyk spouštěly v aktuální relaci konzoly, přidejte příponu souboru používanou skriptovacím jazykem. Pokud chcete například spouštět skripty Pythonu v aktuální konzole, přidejte .py rozšíření do proměnné prostředí. Aby systém Windows podporoval příponu .py jako spustitelný soubor, musíte příponu souboru zaregistrovat pomocí ftype příkazů a assoc příkazů příkazového prostředí CMD. PowerShell nemá žádnou přímou metodu registrace obslužné rutiny souboru. Další informace najdete v dokumentaci k příkazu ftype .

    Skripty PowerShellu se vždy spouštějí v aktuální relaci konzoly. Rozšíření nemusíte přidávat .PS1 .

  • XDG proměnné

    PowerShell na platformách mimo Windows používá následující proměnné prostředí XDG definované specifikací základního adresáře XDG.

    • XDG_CONFIG_HOME
    • XDG_DATA_HOME
    • XDG_CACHE_HOME

Funkce terminálu

Počínaje PowerShellem 7.2 je možné použít následující proměnné prostředí k řízení funkcí virtuálního terminálu, jako jsou řídicí sekvence ANSI, které obarvení výstupu. Podporu řídicích sekvencí ANSI je možné vypnout pomocí TERM proměnných prostředí nebo NO_COLOR proměnných prostředí.

  • TERM

    Následující hodnoty $env:TERM chování změní následujícím způsobem:

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

    Pokud $env:NO_COLOR existuje, je $PSStyle.OutputRendering nastavena na PlainTexthodnotu . Další informace o NO_COLOR proměnné prostředí naleznete v tématu https://no-color.org/.

Viz také