about_Environment_Variables

Stručný popis

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

Dlouhý popis

Proměnné prostředí ukládají data používaná operačním systémem a dalšími programy. Proměnná WINDIR prostředí například obsahuje umístění instalačního adresáře systému Windows. Programy se můžou dotazovat na hodnotu této proměnné a určit, kde se nacházejí soubory operačního systému Windows.

PowerShell může přistupovat k proměnným prostředí na libovolné podporované platformě operačního systému a spravovat je. 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 se v názvech proměnných prostředí v systémech macOS a Linux rozlišují velká a malá písmena. $env:Path Například a $env:PATH jsou různé proměnné prostředí na jiných platformách než Windows.

Proměnné prostředí se na rozdíl od jiných typů proměnných v PowerShellu vždy ukládají jako řetězec a nemůžou být prázdné. Na rozdíl od jiných proměnných jsou také 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, které jsou potřeba v nadřazených i podřízených procesech.

Ve Windows je možné proměnné prostředí definovat ve třech oborech:

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

Obor Proces obsahuje proměnné prostředí dostupné v aktuálním procesu nebo v 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č a Uživatel .

Když změníte proměnné prostředí v PowerShellu, ovlivní tato změna jenom 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í 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ých 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 Pro zprostředkovatele prostředí a Item
  • 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 chcete například 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!

Vzhledem k tomu, že proměnná prostředí nemůže být prázdný řetězec, jeho nastavení na $null nebo prázdný řetězec ho odebere. 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átil chybu, protože proměnná prostředí byla odebrána. Když ho použijete pro prázdný řetězec, uvidíte, že nevrací chybu:

'' | 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 Item

Zprostředkovatel 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é a hodnoty prostředí 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-Itempříkazu , nastavit hodnotu proměnné prostředí pomocí Set-Item, vypsat proměnné prostředí pomocí 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".

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

Použití metod System.Environment

System.Environment Třída 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 pak vrátí její hodnotu.

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

Můžete odebrat proměnnou prostředí setEnvironmentVariable metoda 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í.

Ukládání změn proměnných prostředí

Ve Windows existují tři metody pro provedení trvalé změny proměnné prostředí: jejich nastavení ve vašem profilu, použití metody SetEnvironmentVariable a použití system Ovládací panely.

Ukládání proměnných prostředí ve vašem profilu

Všechny proměnné prostředí, které přidáte nebo změníte ve svém profilu PowerShellu, jsou k dispozici v každé relaci, která načte váš profil. Tato metoda funguje pro libovolnou verzi PowerShellu na libovolné podporované platformě.

Pokud například chcete vytvořit CompanyUri proměnnou prostředí a aktualizovat Path ji tak, aby obsahovala 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 dvojtečka (:) používá místo středníku(;) k oddělení nové cesty od cesty, která před ní v seznamu předchází.

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

Ukládání proměnných prostředí pomocí SetEnvironmentVariable

V systému Windows můžete zadat obor pro SetEnvironmentVariable metoda jako třetí parametr pro nastavení proměnné prostředí v daném oboru. Obory počítačů i uživatelů se uchovávají mimo aktuální proces, což umožňuje 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 Barpro obor počítače:

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

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

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

Ukládání proměnných prostředí pomocí systémového Ovládací panely

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

Trvalé změny proměnné prostředí ve Windows pomocí systémového Ovládací panely:

  1. Otevřete Ovládací panely Systém.
  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 požadované změny.

Proměnné prostředí PowerShellu

Funkce PowerShellu můžou k ukládání uživatelských předvoleb používat proměnné prostředí. Tyto proměnné fungují jako proměnné předvoleb, ale dědí je podřízené relace relací, ve kterých jsou vytvořené. 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 výslovný nesouhlas s telemetrií, nastavte proměnnou prostředí na true, yesnebo 1.

    Další informace najdete v tématu about_Telemetry.

  • POWERSHELL_DISTRIBUTION_CHANNEL

    Počínaje PowerShellem 7.2 se tato proměnná prostředí nastavuje 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 Microsoft. Uživatelé by tuto hodnotu neměli měnit.

  • POWERSHELL_UPDATECHECK

    Chování oznámení o aktualizacích je možné změnit pomocí POWERSHELL_UPDATECHECK proměnné prostředí. Podporují se následující hodnoty:

    • Off vypne funkci oznámení o aktualizacích.
    • Default je stejné jako nedefinování POWERSHELL_UPDATECHECK:
      • Verze GA upozorňují na aktualizace verzí GA
      • Verze Preview/RC upozorňují na aktualizace verzí GA a Preview
    • LTS pouze upozorňuje na aktualizace verzí s dlouhodobou údržbou (LTS) ga

    Další informace najdete v tématu about_Update_Notifications.

  • PSExecutionPolicyPreference

    Ukládá zásady spouštění nastavené 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í pro relaci.

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

      Další informace najdete v tématu about_Execution_Policies.

  • PSModulePath

    Proměnná $env:PSModulePath prostředí obsahuje seznam umístění složek, ve které se hledají moduly a prostředky. Ve Windows je seznam umístění složek oddělený znakem středníku (;). 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á k $env:PSModulePath :

    • Umístění v celém systému: Tyto složky obsahují moduly, které se dodávají s PowerShellem. Moduly jsou uložené v $PSHOME\Modules umístění. Toto je také umístění, kam se instalují moduly pro správu systému Windows.

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

      • Ve Windows je umístěním oboru CurrentUser specifického $HOME\Documents\PowerShell\Modules pro uživatele složka . Umístění oboru AllUsers je $env:ProgramFiles\PowerShell\Modules.
      • V jiných systémech než Windows je umístěním oboru CurrentUser specifického $HOME/.local/share/powershell/Modules pro uživatele složka . Umístění oboru AllUsers je /usr/local/share/powershell/Modules.

    Kromě toho instalační programy, které instalují moduly do jiných adresářů, jako je adresář 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ý se používá k ukládání dat o modulech a jejich rutinách do mezipaměti. Mezipaměť se načte při spuštění 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í pro jiné systémy než Windows: ~/.cache/powershell

    Výchozí název souboru mezipaměti je ModuleAnalysisCache. Pokud máte nainstalovaných více instancí PowerShellu, název souboru obsahuje šestnáctkovou příponu, aby pro každou instalaci existoval 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 soubor mezipaměti odstranit. 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 před spuštěním PowerShellu proměnnou prostředí. Změny této proměnné prostředí ovlivňují pouze podřízené procesy. Hodnota by měla pojmenovat úplnou cestu (včetně názvu souboru), která má PowerShell oprávnění k vytváření a zápisu souborů.

    Pokud chcete mezipaměť souborů zakázat, 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. Nahlášené chyby můžete zobrazit pomocí trasovacího nástroje:

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

    Při zápisu do mezipaměti analýzy modulů PowerShell vyhledá 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 proměnné prostředí na 1hodnotu .

    Nastavení této proměnné prostředí se v aktuálním procesu projeví okamžitě.

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

Informace o cestě

  • CESTU

    Proměnná $env:PATH 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ý znakem středníku (;). 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 některou z uvedených rozšíření spustí z PowerShellu, skript se spustí v aktuální relaci konzoly nebo terminálu. Pokud přípona souboru není uvedená, skript se spustí v nové relaci konzoly.

    Pokud chcete 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ří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 .

  • Proměnné XDG

    Na jiných platformách než Windows používá PowerShell 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é k řízení funkcí virtuálního terminálu, jako jsou řídicí sekvence ANSI, které zabarvují výstup, použít následující proměnné prostředí. Podporu řídicích sekvencí ANSI je možné vypnout pomocí funkce TERM nebo NO_COLOR proměnných prostředí.

  • TERMÍN

    Následující hodnoty $env:TERM změní chování takto:

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

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

Viz také