Poznámka:
Přístup k této stránce vyžaduje autorizaci. Můžete se zkusit přihlásit nebo změnit adresáře.
Přístup k této stránce vyžaduje autorizaci. Můžete zkusit změnit adresáře.
Krátký popis
Popisuje, jak v PowerShellu přistupovat k proměnným prostředí a spravovat je.
Dlouhý popis
Proměnné prostředí ukládají data, která jsou používána operačním systémem a dalšími programy. PowerShell vytvoří následující proměnné prostředí:
POWERSHELL_TELEMETRY_OPTOUTPOWERSHELL_DISTRIBUTION_CHANNELPOWERSHELL_UPDATECHECKPOWERSHELL_DIAGNOSTICS_OPTOUTPSExecutionPolicyPreferencePSModulePathPSModuleAnalysisCachePathPSDisableModuleAnalysisCacheCleanup
Úplný popis těchto proměnných najdete v proměnných prostředí PowerShellu tohoto článku.
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 jsou v systémech macOS a Linux názvy proměnných prostředí rozlišovány podle velikosti písmen. Například $Env:Path a $Env:PATH jsou různé 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)
- Rozsah uživatele
- Obor procesu
Rozsah procesu obsahuje proměnné prostředí dostupné v aktuálním běžícím procesu nebo v relaci PowerShell. Tento seznam proměnných se dědí z nadřazeného procesu a je vytvořen z proměnných v oboru Machine a User.
Když změníte proměnné prostředí v PowerShellu, tato změna ovlivní pouze aktuální relaci. Toto chování se podobá chování příkazu set 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 třeba použít metody třídy System.Environment.
Pokud chcete provádět změny strojově vázaných proměnných, 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é
- Prostředky poskytovatele prostředí a rutiny pro práci s položkami
- 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 proměnné prostředí windir:
$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í, za kterou následuje název 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 prostředí Foo:
$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. Napří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!
Počínaje PowerShellem 7.5 můžete nastavit proměnnou prostředí na prázdný řetězec. Nastavením proměnné prostředí ji $null odeberete z aktuální relace. Například:
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.
Další informace o proměnných v PowerShellu najdete v tématu about_Variables.
Použijte zprostředkovatele prostředí a cmdlety položky
Poskytovatel prostředí PowerShellu
Pokud chcete například vytvořit proměnnou prostředí Foo 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 její hodnotu pomocí Set-Item, vypsat všechny proměnné prostředí pomocí Get-Itema odstranit ji 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 zobrazte úplný seznam proměnných prostředí:
Get-ChildItem Env:
Počínaje PowerShellem 7.5 můžete nastavit proměnnou prostředí na prázdný řetězec pomocí zprostředkovatele prostředí a Set-Item rutiny. Nastavením proměnné prostředí ji $null odeberete z aktuální relace. Například:
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.
Další informace o tom, jak použít poskytovatele Environment 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í, Foo, s hodnotou Bar a poté vrátí její hodnotu.
[Environment]::SetEnvironmentVariable('Foo','Bar')
[Environment]::GetEnvironmentVariable('Foo')
Bar
Počínaje PowerShellem 7.5 můžete nastavit proměnnou prostředí na prázdný řetězec pomocí SetEnvironmentVariable() metody a zadat prázdný řetězec nebo $null hodnotu proměnné. Například:
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
Poznámka
Na rozdíl od syntaxe proměnné a případů zprostředkovatele přiřazení hodnoty k $null použití SetEnvironmentVariable() metody neodebere proměnnou prostředí.
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í:
- Nastavte je ve svém profilu
- Použití metody
SetEnvironmentVariable() - Použití ovládacích panelů systému
Nastavte proměnné prostředí ve svém profilu
Jakoukoli proměnnou prostředí, kterou přidáte nebo změníte ve svém profilu PowerShellu, je možné použít v libovolné 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 prostředí CompanyUri a aktualizovat PATH proměnnou prostředí tak, aby zahrnovala složku C:\Tools, přidejte do profilu PowerShellu následující řádky:
$Env:CompanyUri = 'https://internal.contoso.com'
$Env:PATH += ';C:\Tools'
Poznámka
V Systému Linux nebo macOS se dvojtečka (:) používá místo středníku(;) 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 about_Profiles.
Nastavení proměnných prostředí pomocí SetEnvironmentVariable()
Ve Windows můžete zadat obor pro metodu SetEnvironmentVariable() 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 a umožňují uložit novou nebo změněnou proměnnou prostředí.
Pokud chcete například uložit novou proměnnou prostředí Foo s hodnotou Barv rámci počítače:
[Environment]::SetEnvironmentVariable('Foo', 'Bar', 'Machine')
Proměnnou prostředí můžete odstranit z uživatelského nebo systémového oboru tím, že nastavíte hodnotu proměnné na prázdný řetězec.
[Environment]::SetEnvironmentVariable('Foo', '', 'Machine')
Nastavení proměnných prostředí v Ovládacích panelech systému
V Ovládacích panelech systému můžete přidat nebo upravit existující proměnné prostředí v oborech User a System (Machine). Systém Windows tyto hodnoty zapíše do registru, aby se zachovaly napříč relacemi a restartováním systému.
Chcete-li provést trvalou změnu proměnné prostředí ve Windows pomocí ovládacích panelů systému:
- Otevřete ovládací panely systému.
- Vyberte systému.
- Vyberte Rozšířené nastavení systému.
- Přejděte na kartu Upřesnit.
- Vyberte proměnné prostředí....
- 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. V Linuxu můžete například přidat proměnné prostředí do souboru /etc/environment nebo vytvořit skript, který nastaví proměnné prostředí a umístí je do složky /etc/profile.d. V systému macOS můžete do souboru /etc/profile přidat proměnné prostředí.
Při spouš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 jsou zděděny podřízenými relacemi relací, ve kterých byly vytvořeny. 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_OPTOUTPokud chcete vyjádřit nesouhlas s telemetrií, nastavte proměnnou prostředí na
true,yesnebo1. Další informace najdete v tématu o telemetrii.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_CHANNELPočí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_UPDATECHECKChování oznámení o aktualizaci lze změnit pomocí proměnné prostředí
POWERSHELL_UPDATECHECK. Další informace najdete v části about_Update_Notifications.Podporují se následující hodnoty:
-
Offvypne funkci oznámení o aktualizaci. -
Defaultje stejný jako nedefinováníPOWERSHELL_UPDATECHECK:- Verze GA oznamují aktualizace verzí GA
- Verze Preview/RC upozorňují na aktualizace verzí General Availability (GA) a Preview.
-
LTSupozorní 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.
-
POWERSHELL_DIAGNOSTICS_OPTOUTTato proměnná prostředí byla přidána v PowerShellu 7.6-preview.5. PowerShell ve výchozím nastavení vytvoří pojmenovaný kanál, který se používá pro interprocesovou komunikaci (IPC), například
Enter-PSHostProcess. PowerShell vytvoří pojmenovaný kanál při spuštění, aby byl v případě potřeby k dispozici pro použití.Na jiných platformách než Windows se pojmenované kanály implementují jako soubory ve
/tmpsložce. Pokud dojde k chybovému ukončení PowerShellu, nemusí se tyto soubory odstranit. Tyto soubory se můžou v průběhu času hromadit.Počínaje PowerShellem 7.6
POWERSHELL_DIAGNOSTICS_OPTOUTje nastavená hodnotafalse. Chcete-li vypnout vytváření pojmenovaného kanálu, nastavte proměnnou prostředí natrue,yesnebo1.PSExecutionPolicyPreferenceUloží zásadu spouštění nastavenou pro aktuální relaci. Tato proměnná prostředí existuje pouze v případě, že nastavíte politiku 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 k nastavení zásad provádění relace.
Použijte cmdlet
Set-ExecutionPolicy. Použijte parametr Scope s hodnotouProcess.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 naleznete v tématu about_Execution_Policies.
PSModulePathProměnná prostředí
$Env:PSModulePathobsahuje 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 (;). 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í na umístění
$PSHOME\Modules. 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.
má parametr oboru , který umožňuje určit, jestli je modul nainstalovaný pro aktuálního uživatele nebo pro všechny uživatele. Další informace viz Install-Module. - Umístění uživatelsky specifického rozsahu CurrentUser v systému Windows je ve složce
$HOME\Documents\PowerShell\Modules. Umístění oboru AllUsers je$Env:ProgramFiles\PowerShell\Modules. - Umístění uživatelsky specifického oboru CurrentUser na systémech, které nejsou Windows, je složka
$HOME/.local/share/powershell/Modules. Umístění oboru AllUsers je/usr/local/share/powershell/Modules.
- Umístění uživatelsky specifického rozsahu CurrentUser v systému Windows je ve složce
Kromě toho instalační programy, které instalují moduly v jiných adresářích, jako je například adresář Program Files, mohou připojit jejich umístění k hodnotě
$Env:PSModulePath.Další informace najdete v tématu about_PSModulePath.
PSModuleAnalysisCachePathPowerShell 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 není vrácena žádná chyba. Chyby hlášené pomocí traceru můžete zobrazit:
Trace-Command -PSHost -Name Modules -Expression { Import-Module Microsoft.PowerShell.Management -Force }- Windows PowerShell 5.1:
PSDisableModuleAnalysisCacheCleanupPř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
1.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í, které používá PowerShell
Informace o cestě
PATHProměnná prostředí
$Env:PATHobsahuje seznam umístění složek, ve kterých operační systém vyhledává spustitelné soubory. Ve Windows je seznam umístění složek oddělený středníkem (;). Na jiných platformách než Windows odděluje dvojtečka (:) umístění složek v proměnné prostředí.PATHEXTProměnná
$Env:PATHEXTobsahuje 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 spustit skripty Pythonu v aktuální konzole, přidejte do proměnné prostředí rozšíření
.py. Aby systém Windows podporoval příponu.pyjako spustitelný soubor, musíte příponu souboru zaregistrovat pomocíftypeaassocpříkazů příkazového prostředí CMD. PowerShell nemá žádnou přímou metodu pro registraci správce souborů. Další informace najdete v dokumentaci k příkazu ftype.Skripty PowerShellu se vždy spouštějí v aktuální relaci konzole. Rozšíření
.ps1nemusíte přidávat.XDGproměnnéNa platformách mimo Windows používá PowerShell následující proměnné prostředí XDG, jak je definováno ve specifikaci základního adresáře XDG .
XDG_CONFIG_HOMEXDG_DATA_HOMEXDG_CACHE_HOME
Funkce terminálu
Počínaje PowerShell 7.2 je možné použít následující proměnné prostředí pro řízení funkcí virtuálního terminálu, jako jsou řídicí sekvence ANSI, které obarvují výstup. Podporu řídicích sekvencí ANSI je možné vypnout pomocí proměnných prostředí TERM nebo NO_COLOR.
TERMNásledující hodnoty
$Env:TERMmění chování následujícím způsobem:-
dumb– nastaví$Host.UI.SupportsVirtualTerminal = $false -
xterm-mono– nastaví$PSStyle.OutputRendering = PlainText -
xterm– nastaví$PSStyle.OutputRendering = PlainText
-
NO_COLORPokud
$Env:NO_COLORexistuje, je$PSStyle.OutputRenderingnastavena naPlainText. Další informace o proměnné prostředíNO_COLORnaleznete v tématu https://no-color.org/.